最近做一个项目用到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);
posted on 2015-04-21 19:56  睡梦使者  阅读(7645)  评论(0编辑  收藏  举报