码迷,mamicode.com
首页 > 移动开发 > 详细

Android 自定义Drawable 资源引用问题

时间:2015-04-18 10:05:16      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

问题的复现:

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 资源引用问题

标签:

原文地址:http://blog.csdn.net/jxxfzgy/article/details/45110589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!