java - 状态列表可绘制不适用于禁用状态

标签 java android android-view

我有一个自定义缩放控制 View ,当我的 map 缩小到最大级别时,我希望 View 是透明的。这是我的代码:

zoomOut = (TextView)findViewById(R.id.zoom_out);
zoomOut.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         boolean maxLevel = mapFragment.zoomOut();
         zoomOut.setEnabled(maxLevel);
     }
});

以及资源:

<TextView
        android:id="@+id/zoom_out"
        android:layout_width="@dimen/map_button_size_small"
        android:layout_height="@dimen/map_button_size_small"
        android:background="@drawable/floor_button_bg"
        android:gravity="center"
        android:text="&#8211;"
        android:textSize="28sp"
        android:textColor="@color/btn_map_text_color" />

这是我的 View 中可绘制的状态列表:

<?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">
            <solid android:color="@color/btn_map_bg_selected" />
        </shape>
    </item>

    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/btn_map_bg_selected" />
        </shape>    
    </item>

    <item android:state_enabled="false">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent" />
        </shape>
    </item>

</selector>

当我缩小到最大级别时, View 被禁用(不可点击),但背景是相同的。 感谢您的帮助。

最佳答案

尝试更改项目的顺序:

<?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="@android:color/transparent" />
        </shape>
    </item>
    <item android:state_pressed="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/btn_map_bg_selected" />
        </shape>
    </item>

    <item android:state_selected="true">
        <shape android:shape="rectangle">
            <solid android:color="@color/btn_map_bg_selected" />
        </shape>    
    </item>

</selector>

选择器应用与条件匹配的第一个项目,在您的情况下, TextView 必须处于选定或按下状态,以便应用该项目。

关于java - 状态列表可绘制不适用于禁用状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20326087/

相关文章:

java - Jackson反序列化——聚合几个字段

android - 使用模板测试剪辑在 OpenGL-ES 中绘制的项目

java - PNG 纹理未在 HTC desire 上加载

java - 字符串到java中的jsonobject

java - 使用 JSOUP 解析动态加载(通过滚动)页面

Android:类存在时出现 ClassNotFoundException

Android Copy String 类似Delphi Copy的功能

android - 改造滚动发光在填充之外

android - 每次在 getView 中 View 都会膨胀。 findViewById(...) 已执行多次。我用过View Holder

android - 更改 LayoutParams 后,RelativeLayout 中的按钮消失