使用布局选择器更改其子项的属性

时间:2011-11-21 11:38:32

标签: android listview

默认情况下,ListView会在按下时将背景颜色更改为橙​​色,TextColor的{​​{1}}也会更改为白/黑。通过在TextView项目上应用选择器,我们可以为按下状态设置背景颜色,但我们是否还可以在同一选择器内的项目/布局中为ListView定义TextColor?如果是这样,那怎么样?

2 个答案:

答案 0 :(得分:12)

Amy88的答案解决了这个问题,但没有具体解决改变ViewGroup孩子的属性的问题。

假设您有一个带有LinearLayout的可点击TextView,按下时应更改颜色。关键是在子视图上使用android:duplicateParentState="true"

<LinearLayout
    android:duplicateParentState="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:duplicateParentState="true"
        android:text="@string/hello_world"
        android:textColor="@drawable/text_selector" />

</LinearLayout>

您可以在Amy88的答案中指定选择器。

答案 1 :(得分:7)

如果要为ListAdapter定义自定义布局文件,请将自定义布局中TextView的文本颜色设置为xml。此布局应放在可绘制的资源文件夹中(创建一个可绘制的文件夹并将text_selector.xml放在其中)。

text_selector.xml:

<item android:state_selected="true" android:color="@android:color/black"/>
<item android:state_focused="true" android:color="@android:color/black"/>
<item android:state_pressed="true" android:color="@android:color/black"/>
<item android:color="@android:color/white"/>

设置文字颜色使用: android:textColor =“@ drawable / text_selector”

上面的示例xml默认情况下会将文本颜色设置为白色,并在对焦,选择或按下列表项时将文本颜色设置为黑色。