16

私は前にこれをしました。コピペしました。ネットから他の多くの例をコピーして貼り付けました。textcolor セレクターを機能させることはできません。デフォルトの色をテキストビューに設定しますが、テキストビューをクリックしても変更されません。背景の 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をカラーフォルダーに入れることも解決策ではありません。何か案は?

4

5 に答える 5

39

TextView が、申請している州をリッスンする準備ができていることを確認してください。たとえば、「state_pressed」に到達できるようにするには、textView をクリック可能にする必要があります。

android:clickable="true"

編集:さて、行きます。このレイアウトは仕事をします。クリック イベントを収集するビューは 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>

そして、これがカラーセレクターのコードです。

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

それだけです。

于 2012-08-22T20:55:10.970 に答える
26

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


それで全部です。

于 2013-09-05T08:47:52.980 に答える
1

「クリック可能な」レイアウトの前に TextView をラップしている可能性のあるすべてのレイアウトにも duplicateParentState="true" があることを確認してください。そうしないと、テキスト ビューが必要な要素の状態に到達しません。

于 2014-07-10T15:50:49.660 に答える
0

コードでこれを設定する必要があります:android:clickable="true"TextViewsの場合

于 2012-08-22T20:50:47.060 に答える