追加 - android textview 更新




Textcolorセレクタが機能しない (4)

私は前にこれをしました。 コピーペーストしました。 私はネットから他の多くの例をコピー&ペーストした。 私は単純に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>

それらのどれも働いていません。 colorフォルダにセレクタxmlを配置しても解決策はありません。 何か案は?


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

TextViewまたはandroid:duplicateParentState="true" android:clickable="true"を設定する必要はありません。

溶液
Step-1: res / colorフォルダの下にあなたのカラーセレクタを定義してください(Jose L Ugiaのカラーセレクタはこれに適しています)。
Step-2:このカラーセレクタをあなたのTextViewにandroid:textColor="@color/m_text_selector"として設定しますandroid:textColor="@color/m_text_selector"android:textColor="@color/m_text_selector" drawable / *としてではありません)

注意: textColorセレクタをプログラムで設定する場合は、セレクタを色ではなく色の状態リストとして取得する必要があります。

textView.setTextColor(getResources().getColorStateList(R.color.m_text_selector));


それで全部です。


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

android:clickable="true"

編集:そこに行きます。 このレイアウトは仕事をします。 clickイベントを収集するビューは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>

それはそれであるはずです。


あなたはあなたのコードでこれを設定しなければなりません:TextViewsのためのandroid:clickable="true"





textview