Android - 从shape xml引用的ColorStateList xml的问题

时间:2011-08-09 19:33:14

标签: android xml selector shape

我遇到了一个问题,我的一个可绘制的xml文件中的颜色选择器似乎没有被尊重。我的布局包括:

<LinearLayout 
    android:layout_height="wrap_content"
    android:id="@+id/sortLayout"
    android:layout_width="fill_parent"
    android:gravity="center"
    android:background="@color/listSortBarBackground" android:orientation="vertical">
    <ToggleButton
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:checked="true"
        android:background="@drawable/filter_button_left"/>
    <ToggleButton
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:checked="false"
        android:background="@drawable/filter_button_left"/>
</LinearLayout>

drawable \ filter_button_left.xml看起来像:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
  android:shape="rectangle">
  <solid android:color="@color/filter_button_color" />
  <corners
    android:bottomLeftRadius="0dp"
    android:topLeftRadius="5dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="5dp"/>
</shape>

和color \ filter_button_color.xml是:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
  <item
    android:color="@color/myred"
    android:state_checked="true"/>
  <item
    android:color="@color/myblue"
    android:state_checked="false"/>
</selector>

(myred和myblue在colors.xml中定义)

按钮被渲染,我可以告诉他们正在获得正确的检查状态,因为第一个显示文本“ON”而第二个显示“OFF”,两个按钮都将形状作为背景,但在两种情况下形状的颜色是myred。我在翻转filter_button_color.xml选择器中的项目时玩了一遍,似乎无论实际状态或选择器项中的状态如何,总是使用顶部颜色。

谁能明白为什么这不起作用?

谢谢! 斯科特

1 个答案:

答案 0 :(得分:3)

我认为你的问题是你有错误的xml drawables 您需要从ToggleButton布局引用您的选择器FIRST,并在选择器布局内部有两个drawable。
例如ToggleButton - &gt;选择器(有两种状态) - &gt;形状。
这应该工作(并减少一个xml文件)。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true">
        <shape>
            <solid android:color="@color/myred"/>
            <corners 
                android:bottomLeftRadius="0dp" 
                android:topLeftRadius="5dp" 
                android:topRightRadius="0dp" 
                android:bottomRightRadius="5dp"/>
        </shape>
    </item>
    <item android:state_checked="false">
        <shape>
            <solid android:color="@color/myblue"/>
            <corners 
                android:bottomLeftRadius="0dp" 
                android:topLeftRadius="5dp" 
                android:topRightRadius="0dp" 
                android:bottomRightRadius="5dp"/>
        </shape>
    </item>
</selector>