最近做一個項目用到popupWindow,但是在開發的過程中不知道什么原因創建好的視圖放上去之后window總是彈不出來,logcat打印對應的異常如下:
說的是因為popupwindow沒有獲取焦點,於是乎在popupwindow的布局中添加上android:focusable="true",結果依舊是相同的異常,搞得非常郁悶,以前popupwindow一直都是那樣使用的,也從來沒有出現過問題。
沒辦法就開始各種查找資料,結果也沒有一個能得到合適的解決,實在沒有辦法既然提示的是說View沒有焦點那么我就在彈窗的子元件中添加android:focusable="true",剛加上之后也是沒有任何的效果,由於彈出窗中使用的僅僅是網格布局嵌套TextView,點擊TextView需要執行相應的事件,既然彈不出來就先寫着TextView的Onclick方法吧,沒想到剛寫完一個監聽,在觸發彈窗事件時彈出窗口竟然好用了,如夢初醒,原來這個異常的出現是由於彈出窗口中沒有控件對應相應的事件處理,在彈窗視圖中添加對應的事件監聽后整個彈出框便能夠獲取焦點,由此進行處理。該功能與popupWindow的focusable屬性相對應,既然想彈框並且進行交互,必須要可獲取焦點,沒有對應事件處理該怎么獲取焦點呢?
子視圖在XML中定義沒有任何問題,但是就是不彈框:
<TextView android:id="@+id/tksy" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp" android:textSize="16sp" android:textColor="@color/form_background" android:text="@string/tksy" android:background="@drawable/textselector" />
后面添加focusable屬性,仍舊沒有反應:
<TextView android:id="@+id/tksy" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:paddingTop="10dp" android:paddingBottom="10dp" android:textSize="16sp" android:textColor="@color/form_background" android:text="@string/tksy" android:background="@drawable/textselector" android:focusable="true" />
最后在添加了對應的OnClick監聽之間之后,彈出框能夠彈出來,並且能夠使用對應定義的selector,但是其他未添加監聽事件的TextView沒有使用selector的效果。
附加popupWindow定義時必須添加的屬性:
popupWindow = new PopupWindow(layout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); popupWindow.setFocusable(true); //該值為false時,點擊彈窗框外面window不會消失,即使設置了背景也無效,只能由dismiss()關閉 popupWindow.setOutsideTouchable(true); //只有該值設置為true時,外層點擊才有效 popupWindow.update(); popupWindow.setBackgroundDrawable(new BitmapDrawable());//只有設置背景之后在focsable為true時點擊彈出框外面才會消失, popupWindow.showAsDropDown(menu);