设置spinner背景的代码如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/img_dropdown_bg_normal" android:state_window_focused="true" /> <item android:drawable="@drawable/img_dropdown_bg_pressed" android:state_pressed="true"/> <item android:drawable="@drawable/img_dropdown_bg_normal" android:state_pressed="false"/> </selector>
该问题的必要条件:
1,在同一个界面上显示3个Spinner控件
2,3个控件的实现组件是DialogFragment
3,Spinner相关代码已经写好
出现的问题是:
点击任意一个Spinner控件,其他两个控件要么不动,要么一起联动(背景跟着改变)
如果是一个Spinner控件显示就完全可以有正常的用户体验。
解决办法:
用了昨天一天的时间来解决这个问题,已开始觉得自己刚研究这个控件有很多东西没有注意到,怀疑是自己那个地方没有细节处理下,用了好多尝试。
1,检查代码,下拉框相关代码提取出来新建一个项目,仔细检查之后发现没有逻辑上的错误;
2,在源代码添加监听器,并把selector元素给删除掉,监听控件的触摸事件,结果是新加的监听器和Spinner控件2个相关监听器可能有冲突,设置了之后不起作用,不能执行新加的监听器代码。
3,心冷之后,打算改用popwindow,于是另建一个项目测试多个Spinner控件的效果,用的selector元素作为背景,可惜结果还是和Spinner一样,验证了还是Spinner控件有问题,继续研究Spinner。
4,上网搜了很多资料发现有的文章指向了selector元素,于是打印Spinner控件是否聚焦,发现
window_focused的作用,明白了下拉框弹出下拉列表的原理其实是相当于弹出了一个窗口,这时候DialogF