zoukankan      html  css  js  c++  java
  • android: drawable中同时设置state_enabled和和state_pressed不起作用的问题

     直接说结论,一定要注意selector中各个属性的顺序问题,比如要同时设置按钮的按下及可用状态,必须按照下列顺序编写:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_enabled="false">
            <shape android:shape="rectangle">
                <solid android:color="#A5BBE9" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
        <item android:state_pressed="false">
            <shape android:shape="rectangle">
                <solid android:color="@color/app_color_dark" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <solid android:color="@color/app_color" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
    </selector>

    注意! android:state_enabled="false"  必须在最上面,如果写成:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item android:state_pressed="false">
            <shape android:shape="rectangle">
                <solid android:color="@color/app_color_dark" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
        <item android:state_pressed="true">
            <shape android:shape="rectangle">
                <solid android:color="@color/app_color" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
        <item android:state_enabled="false">
            <shape android:shape="rectangle">
                <solid android:color="#A5BBE9" />
                <corners android:radius="4dip" />
            </shape>
        </item>
    
    </selector>

    那么直接设置 button.setEnabled(false)背景是没有任何变化的,算是android的一个坑吧,据说是因为这样:

    selector中各个item的顺序是会影响实际效果的, selector的item从上到下是按照匹配原则来改变状态的,一旦匹配到某个item的状态,就不会继续往下匹配

    详情可参考:Android selector中设置 android:state_enabled 不起作用问题的解决

  • 相关阅读:
    面试题27:二叉树的镜像
    面试题26:树的子结构
    面试题25:合并两个排序的链表
    面试题24:反转链表
    面试题23:链表中环的入口节点
    面试题22:链表中倒数第k个节点
    欧拉函数的使用
    C++ STL 全排列函数详解
    Ubuntu系统安装网易云音乐、搜狗输入法
    Ubuntu系统 安装谷歌 Chrome 浏览器
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/14577754.html
Copyright © 2011-2022 走看看