【问题标题】:Textcolor selector not working文本颜色选择器不起作用
【发布时间】:2012-08-18 08:11:22
【问题描述】:

我以前做过。我复制粘贴。我从网上复制粘贴了许多其他示例。我根本无法使 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>

这是 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>

或者这个

<?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>

或者这个

<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>

它们都不起作用。将选择器 xml 放到颜色文件夹中也没有解决办法。 有什么想法吗?

【问题讨论】:

标签: android textview


【解决方案1】:

您必须在代码中设置:android:clickable="true" 用于 TextViews

【讨论】:

    【解决方案2】:

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

    android:clickable="true"
    

    编辑:我们开始了。这种布局可以完成这项工作。请注意,收集点击事件的 View 是 linearLayout,但 TextView 会重现它,因为“duplicateParentState”设置为 true。颜色选择器会处理不同状态的颜色。

    <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>
    

    这是颜色选择器的代码。

    <?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>
    

    应该是这样的。

    【讨论】:

    • 这不好。我不想点击文本视图,因为这意味着当我点击上一个时,只有上一个的文本颜色会发生变化。我需要在线性布局中处理这个,
    • 好吧,我不知道。然后,您需要通过将“android:duplicateParentState="true"" 放入您需要的所有视图中来继承文本视图中父级前面的状态。
    • 虽然确保你设置了你的父布局(在这种情况下是你的 LinearLayout)clickable = true。
    • 请提供更具体的代码。将 android:duplicateParentState="true" 添加到 TextView 并将 android:textColor="@drawable/settings_selector_txt" 添加到 textview 周围的线性布局没有任何作用
    • 您不需要向 LinearLayout 添加颜色选择器。这个想法是 textview 将采用他父母的状态(在这种情况下为 LinearLayout )。这就是我们需要将 duplicateParentState 添加到 textview 的原因。我们想要达到并且我们有一个选择器的状态是按下状态。我们只希望我们的 TextView 达到这种状态,以便唯一需要选择器的 View 就是那个。 (我们的 TextView)不需要其他任何东西。如果您仍然需要更多帮助,我会给您一些代码。但最好猜一下;)
    【解决方案3】:

    无需将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));
    


    就这样。

    【讨论】:

      【解决方案4】:

      确保所有可能在“可点击”布局之前包装 TextView 的布局也具有 duplicateParentState="true",否则,文本视图将无法达到您想要的元素状态。

      【讨论】:

        【解决方案5】:

        我认为使用 ColorStateList 是旧版和最新版 Android 的最佳选择。

        int[][] states = new int[][] {
            new int[] { android.R.attr.state_pressed}, // pressed
            new int[] { android.R.attr.state_focused}, // focused
            new int[] {}
        };
        int[] colors = new int[] {
            getResources().getColor(R.color.green_color), // green
            getResources().getColor(R.color.green_color), // green
            getResources().getColor(R.color.white)  // white
        };
        ColorStateList list = new ColorStateList(states, colors);
        mTextView.setFocusable(true);
        mTextView.setClickable(true);
        mTextView.setTextColor(list);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-31
          • 1970-01-01
          • 2020-04-29
          • 2012-12-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多