AlertDialog 与 PopupWindow的 区别

来源:互联网 发布:java数据结构编程 编辑:程序博客网 时间:2024/05/22 02:22

最近在写一个小的项目,点击按钮,颜色变换,并下发命令到MCU,然后去按车机实体键,MCU返回数据后,再次改变按钮颜色,界面上有多个按钮需如此设置,如同设置快捷键。当实体键被设置时,弹框提示 是否覆盖。而问题就出现在这里,也是我觉得的AlertDialog 与PopupWindow 很明显的一个区别。

首先,我的按钮(ImageButton)的背景色是通过selector去配置的,如下:

<selector  xmlns:android="http://schemas.android.com/apk/res/android">    <item android:state_enabled="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/swl_btn_default_small_normal" />    <item android:state_enabled="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/swl_btn_default_small_pressed" />    <item android:state_enabled="true" android:state_selected="true" android:drawable="@drawable/swl_btn_default_small_selected" />    <item android:state_enabled="false" android:drawable="@drawable/swl_btn_default_small_success" /></selector>

然后,颜色的更换,通过button.setSelected(false);button.setPressed(true); 这些方法来切换颜色显示。效果都是OK的,杠杠的。可是,当我用 AlertDialog弹框提示的时候,AlertDialog一弹出,按钮的颜色全部复原为swl_btn_default_small_normal这个背景色,然后关闭弹框后,也还是那个颜色,弹框之前的颜色全部丢失了,看着真心让人惆怅。几经查找,觉得问题应该是出在selector上面了,弹框出来后,按钮的状态发生了变化,系统自动处理了,将按钮颜色 设置为swl_btn_default_small_normal(个人猜测,是这样,若那位大牛知道机制、或者有其他的见解,就科普交流下哈)。因此,我想要实现,弹框 弹出、消失后,颜色保留,那么我自己得维护一个状态数据集,觉得太过麻烦,就想到了PopupWindow,果然,他,没有让我失望,完全是我想要的效果。

不过,在使用的时候,还是遇到了个问题,PopupWindow 弹出,焦点阻塞的问题,我是想用PopupWindow 模仿AlertDialog那样,弹出后,其他控件不能获得焦点,不能接受点击事件,可是,不管我设置 PopupWindow 的背景色,或者 mPopupWindow.setOutsideTouchable(false);  当PopupWindow  弹出后,其他的按钮,可以照常接受点击事件,让人纠结啊,惆怅啊。后面百度,看到一个文章,正好适合我,也很巧妙,链接如下:

利用Android PopupWindow 实现自定义弹出层


要阻塞后面按钮的事件,可以将PopupWindow 全屏处理,这样就可以遮盖下面的View,实现AlertDialog 那样的阻塞效果。so easy!

原创粉丝点击