Android 自定义Drawable 资源引用问题
2015-04-18 09:36
686 查看
问题的复现:
Activity布局文件代码如下:<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:clickable="true" android:layout_centerInParent="true" android:layout_width="100dp" android:layout_height="54dp" android:background="@drawable/color_bg_selector"> <TextView android:layout_centerInParent="true" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" android:textColor="@color/bg_color_text_selector" android:text="确定"/> </RelativeLayout> </RelativeLayout>
就一个 按钮View,背景可改变, TextView 的字体颜色也可改变
color_bg_selector.xml代码:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <corners android:radius="5dp"/> <stroke android:color="@color/btn_color_normal" android:width="3dp"/> <solid android:color="@android:color/white"/> </shape> </item> <item android:state_selected="true"> <shape android:shape="rectangle"> <stroke android:color="@color/btn_color_normal" android:width="3dp"/> <solid android:color="@android:color/white"/> <corners android:radius="5dp"/> </shape> </item> <item > <shape android:shape="rectangle"> <stroke android:color="@color/btn_stoke_druck" android:width="3dp"/> <solid android:color="@android:color/white"/> <corners android:radius="5dp"/> </shape> </item> </selector>
bg_color_text_selector.xml代码如下
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/txt_color_normal"/> <item android:state_selected="true" android:color="@color/txt_color_select"/> <item android:state_pressed="true" android:color="@color/txt_color_select"/> </selector>
代码只有一个按钮,实现点击的时候改变按钮的背景颜色,同时字体颜色也要改变,即我们期望的效果是:
对,没错,这只是我们期望的效果,现实往往跟期望是有出入的。
我们把代码跑起来,结果运行的效果是这样的:
如果你们觉得有疑问,可以把以上代码拷贝到工程中跑起来试试!
确实字体的颜色按下的时候没有改变,why ?why ?why ?why ?
明明设置了字体颜色为
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/txt_color_normal"/> <item android:state_selected="true" android:color="@color/txt_color_select"/> <item android:state_pressed="true" android:color="@color/txt_color_select"/> </selector>
我还曾一度怀疑是不是字体颜色不能这样设置?最后我把它改成跟上面bg_color_text_selector.xml顺序一样
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_selected="true" android:color="@color/txt_color_select"/> <item android:state_pressed="true" android:color="@color/txt_color_select"/> <item android:color="@color/txt_color_normal"/> </selector>
我擦,有效果了!
这里可以得出结论:drawable 在读取状态的时候跟顺序有关系!
怎样能避免这种情况呢?
有两种方法:
1、不要偷懒,改写的全部写全,比如这里明明是
<item android:state_pressed="false" android:color="@color/txt_color_normal"/>
却把android:state_pressed=”false” 省略,导致的后果就是没有效果。
2、把不要的状态不要写在里面,比如这里
android:state_selected="true"
压根没用到,所以不要写进去,
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/txt_color_normal"/> <item android:state_pressed="true" android:color="@color/txt_color_select"/> </selector>
这样也是有效果的。
相关文章推荐
- 关于Android开发中图片资源文件夹drawable中图片与资源ID号出现对不上的问题
- Android错误引用自定义资源数据类型,造成安装解析产生未知错误
- 解决android引用依赖工程资源问题
- Android Bitmap内存管理,解决内存溢出问题(1)之自定义BitmapDrawable
- Android自定义Selector类型的drawable资源
- Android 通过Drawable资源自定义编辑框
- android res资源 drawable自定义背景 values格式
- Android中的xml或者drawable下面的资源无法在R.java中生成id的问题--2014年12月3日
- android通过drawable资源实现常用的自定义效果
- Android studio value 2 (com.android.dex.DexException:资源重复引用或者加载问题)
- android studio drawable文件下xml 引用 mipmap 资源文件问题
- Android中自定义drawable资源实现布局的圆角边框效果
- android常见的自定义drawable资源
- Android开发中自定义string、color、style、drawable,title,布局页面(include)的资源使用方法.txt
- Android 多主题切换 (theme + style) 及 selector/drawable 无法引用 ?attr 属性的问题
- 关于在Android项目上引用兼容包里主题资源报错问题解决方法
- Android 多主题切换 (theme + style) 及 selector/drawable 无法引用 ?attr 属性的问题
- 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingActionButton的Behavior(跟随列表滑动显示隐藏)只隐藏不出现的问题
- android studio library下引用aar失败的问题?
- Android中的资源引用