1. 程式人生 > >Android popupwindow 失去焦點或者點選空白區域時消失的解決方法

Android popupwindow 失去焦點或者點選空白區域時消失的解決方法

先來看下Android API 的這個Methods:

public void setOutsideTouchable (boolean touchable)

Controls whether the pop-up will be informed of touch events outside of its window. This only makes sense for pop-ups that are touchable but not focusable, which means touches outside of the window will be delivered to the window behind. The default is false.

If the popup is showing, calling this method will take effect only the next time the popup is shown or through a manual call to one of the methods.

Parameters

touchable true if the popup should receive outside touch events, false otherwise

就是說,基本通過這個屬性和setFocusable(true);就能實現點選別的區域讓popup消失,

也可以這樣做,設定點選popup窗體自身,讓其消失,通過下邊的方法即root重寫onTouch方法:

 //點選窗體,PopupWindow消失           
                root.setOnTouchListener(new View.OnTouchListener() {
                    @Override
                    public boolean onTouch(View v, MotionEvent event) {
                        popup.dismiss();
                        return true;
                    }
                });

同樣, 可以不用重寫root的onTouch方法,而該重寫 Activity的onTouchEvent()方法,正常情況下也能實現popup消失.
  @Override
    public boolean onTouchEvent(MotionEvent event) {  
        if (popup != null && popup.isShowing()) { 
            popup.dismiss(); 
            popup= null; 
        } 
        return super.onTouchEvent(event);
    }

但是, 我遇到一個問題,就是上述的方法都解決不了, 是什麼原因? 

其實,罪魁禍首就是, popup的程式碼順序, 手賤先呼叫了 showAsDropDown()方法,在設定其他屬性,導致了這種情況.

showAsDropDown這個方法相當於 Dialog.show()方法,  如果是先show了, 然後其他屬性即使是設定了,也起不到應有的作用. 

這一點,經常提醒別人,沒想到到popup這裡我犯了同樣的錯誤.

相關推薦

Android popupwindow 失去焦點或者空白區域消失解決方法

先來看下Android API 的這個Methods: public void setOutsideTouchable (boolean touchable) Controls whether the pop-up will be informed of touc

Android popupwindow 失去焦點或者空白區域消失解決方法

override -m its 順序 his false 讓其 rop make 先來看下Android API 的這個Methods: public void setOutsideTouchable (boolean touchable) Co

android 滑動或者其他地方隱藏鍵盤的方法,

/** * 設定滑動隱藏鍵盤的操作 *parentView 最外層的父佈局,主要用於隱藏鍵盤 *mSendText,某個按鈕,比如傳送按鈕,避免也當隱藏鍵盤處理,不過這裡isShouldHideKeyboard限制了只能進入EditText,所以暫時不起作用,有要做處理的可以把isShould

Android空白區域隱藏軟鍵盤的實現

實現思路:點選事件監聽,判斷使用者點選的座標是否為EditText的區域,如果不在則關閉軟鍵盤 一個事件點選監聽,一個判斷是否點選EditTextView的方法,一個關閉軟鍵盤的方法 @Override public boolean dispatchTouchEvent(MotionEvent

Android EditText 輸入完畢 空白區域鍵盤自動退出

  在android中點選EditText的時候會彈出軟鍵盤,但當我們輸入完畢或者想隱藏軟鍵盤時,我們可以點選軟鍵盤上的隱藏按鈕,這種方法固然可行,但是為了提高使用者體驗,我們常常要實現這種功能:當輸

PopupWindow 設定外部區域消失

PopupWindow預設點選彈出外部區域dismiss   想要設定點選外部區域不消失需要設定底下三個方法 popupWindow.setOutsideTouchable(false); popupWindow.setFocusable(false); popupWindo

空白區域,div隱藏

當我點選查詢條件時,查詢條件div顯示出來 如下 當我再點選空白區域的時候,查詢條件隱藏。 這裡面主要是用到一個防止冒泡的功能 $(".rightMenuAlert").click(function(e){$(".cxtj").animate({right:'0px'},

AlertDialog、Dialog空白區域取消和不取消

AlertDialog相比較以前有了較大變化,就是在觸控對話方塊邊緣外部,對話方塊消失 於是研究其父類發現,可以設定這麼一條屬性,當然必須先AlertDialog.Builder.create()之後才能呼叫這兩個方法 方法一: setCanceledOnTouch

提高selenium自動化的穩定性1-空白區域

在寫selenium自動化的過程中,經常會遇到這樣的問題: 1.在同一個頁面內做操作,比如點選某個按鈕後,彈出一個框,再點選另外一個按鈕,又彈出一個框 2.此時如果第一個click操作後,第二個click再點選時,由於前一個彈出的框仍舊在前端顯示,就會出錯 3.在實際人工操作中,點擊出第一個框後,點選

Activity對話方塊樣式. 空白區域關閉視窗

  Dialog除了使用Dialog類來實現之外,還可以使用Dialog樣式的Activity來實現,只需要在註冊Activity時指明theme為adnroid:Theme.Dialog就行,這樣的Dialog因為實際上是個Activity而更加豐富靈活。在API11(如果沒記錯的話)之前的dialog樣

親測有效:bootstrap 彈出框其他區域彈出框不消失選項設定

將data-backdrop="static"  加入到下方處,親測有效 <div class="modal fade" id="gcDataModel" tabindex="-1" role="dialog" aria-labelledby="myModalLab

c#wimform在vs2010生成的exe在xp上無反應。(解決方法之一)

從某個幾角疙瘩找到解決方法。 首先確保生成平臺是x86,其次是確保引入的dll能夠適應win32和xp系統。其三,如果是在win7環境下開發,還有一種可能,就是軟體圖示問題,win7下可以使用任意大小的ioc。但是在xp系統下,要使用16 x 16的ioc圖示。如果以上方法

WPF 平板上按鈕不觸發,滑鼠觸發的兩種解決方法

原文: WPF 平板上按鈕點選不觸發,滑鼠點選觸發的兩種解決方法 今天執行在windows平板上的程式,有個功能是彈出子窗體,點彈出窗體的關閉按鈕,要點好幾次才能觸發。網上找了找,也有人與我類似的情形。 解決方法如下: public static void DisableWPFTabletSupp

win10工作列右鍵無反應解決方法

開始鍵,工作列點選右鍵無反應解決方式 1、在鍵盤上按下win+R鍵,或在開始選單圖示上點選右鍵選擇執行;2、輸入powershell,按下“確定”執行;3、在窗口裡輸入或複製貼上以下命令,注意只有一

Win10 64位使用Xilinx ISE14.7Open Project崩潰的解決方法

Win10 64位使用Xilinx ISE點選Open Project崩潰的解決方法,此方法同樣適用於選擇燒寫的bit檔案時崩潰的情況,所以可以推測只要在有彈窗需要選擇檔案時崩潰,此方法都可以解決 1). 將安裝目錄下X:\Xilinx\14.7\ISE_DS

硬碟分割槽檔案格式變成RAW,就顯示未格式化解決方法(小莫)

硬碟分割槽檔案格式變成RAW,點選就顯示未格式化。但格式化又失敗解決方法 以上問題都是分割槽由於某種原因造成了格式變化成RAW了,具體原因可能有很多,下面有幾種方法解決的方法也有幾個,西部e網歸納了一下,遇到此問題的朋友根據情況來解決吧!方案1、2只對原系統是NTFS格式有效

MFC中點文字框顯示提示,其他地方提示消失方法

BOOL CPrjDlg::PreTranslateMessage(MSG* pMsg) {if ((pMsg->message == WM_LBUTTONDOWN) || (pMsg->message == WM_LBUTTONUP))  //核心點    

ASPNETMVC Core新增控制器提示“執行所程式碼生成器出錯”解決方法

ASPNET MVC Core中像Controller中新增控制器提示“執行所選程式碼生成器時出錯”  解決辦法  清理專案、清理解決方案,重新生成專案或重新生成解決方案,再新增一次控制器,如果還提示同樣的錯誤,重啟VS後再試即可。

android 如何讓通知不被清除或者後不消失

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

特定區域 input框不觸發失去焦點事件

//給特定區域新增ID 繫結onmousedown 事件 document.getElementById('customModelItemMatch').onmousedown=function(e){ //現代瀏覽器阻止預設事件