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 不起作用问题的解决

  • 相关阅读:
    如何突破单库性能瓶颈?
    高性能数据库表该如何设计?
    高性能索引该如何设计?(下)
    高性能索引该如何设计?(上)
    MySQL体系结构与存储引擎
    动态ViewPager导航页面
    ViewPager图片轮转带点的
    手动图片横向轮播
    安卓布局中下拉列表框的实现
    安卓中adapter的应用
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/14577754.html
Copyright © 2011-2022 走看看