Textcolor选择器无法正常工作

erd*_*ter 14 android textview

我之前做过这个.我复制粘贴了.我从网上复制粘贴了许多其他的例子.我根本无法使textcolor选择器工作.它将默认颜色设置为textview,但如果单击textview,它将不会更改.后台的settings_selector工作正常.

这是布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/settings_selector"
    android:clickable="true"
    android:id="@+id/llRecentChanges"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:paddingLeft="5dp">
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/llRecentChanges2"
        android:layout_weight="1"
        android:layout_gravity="center_vertical">
    <TextView
        android:id="@+id/tvAbout"
        android:text="@string/settings_recentchanges"
        android:gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:textColor="@drawable/settings_selector_txt" >
    </TextView>
    <TextView
        android:id="@+id/tvAbout2"
        android:text="@string/settings_recentchanges2"
        android:gravity="center_vertical"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@drawable/settings_selector_txt"
        android:textSize="10dp">
    </TextView>
    </LinearLayout>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是settings_selector_txt xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#FFFFFF" />
    <item android:state_focused="true" 
          android:state_pressed="true"
          android:color="#ffa800" />
    <item android:state_focused="false" 
          android:state_pressed="true"
          android:color="#ffa800" />
    <item android:color="#FFFFFF" />
</selector>
Run Code Online (Sandbox Code Playgroud)

或这个

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true" android:color="#444"/>
    <item android:state_pressed="true" android:color="#444"/>
    <item android:color="#ccc"/>

</selector>
Run Code Online (Sandbox Code Playgroud)

或这个

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_focused="true" android:state_pressed="false" android:color="#ffffff" />
    <item android:state_focused="true" android:state_pressed="true" android:color="#000000" />
    <item android:state_focused="false" android:state_pressed="true" android:color="#000000" />
    <item android:color="#ffffff" />
</selector>
Run Code Online (Sandbox Code Playgroud)

他们都没有工作.将选择器xml放到颜色文件夹也没有解决方案.有任何想法吗?

Jos*_*gia 36

确保您的TextView已准备好收听您申请的州.例如,为了能够到达"state_pressed",您的textView应该是可点击的:

android:clickable="true"
Run Code Online (Sandbox Code Playgroud)

编辑:我们去.这种布局完成了这项工作.请注意,收集click事件的View是linearLayout,但由于"duplicateParentState"设置为true,TextView会再现它.颜色选择器将处理不同状态的颜色.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/testLlayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:clickable="true" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@drawable/textview_selector"
        android:duplicateParentState="true"
        android:text="TextView" />

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

这是颜色选择器的代码.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_selected="true" android:color="#444"/>
    <item android:state_focused="true"  android:color="#444"/>
    <item android:state_pressed="true"  android:color="#444"/>
    <item android:color="#ccc"/>

</selector>
Run Code Online (Sandbox Code Playgroud)

那应该是它.


Dev*_*rim 24

无需设置android:clickable="true"TextView或android:duplicateParentState="true".

解决方法
步骤1:在res/color文件夹下定义颜色选择器(Jose L Ugia的颜色选择器适用于此.)
步骤2:将此颜色选择器设置为TextView android:textColor="@color/m_text_selector"(不是@drawable/*!!!)

注意:如果要以编程方式设置textColor选择器,则必须将选择器作为颜色状态列表而不是颜色;

textView.setTextColor(getResources().getColorStateList(R.color.m_text_selector));
Run Code Online (Sandbox Code Playgroud)


就这样.

  • 你救了我的一天!!!! 我正在努力,因为我是以编程方式设置的! (5认同)