Селектор цветной печати не работает

Я делал это раньше. Я скопировал. Я скопировал много других примеров из сети. Я просто не могу заставить селектор цветной печати работать. Он устанавливает цвет по умолчанию для 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 в папку цветов также не является решением. Есть идеи?

Solutions Collecting From Web of "Селектор цветной печати не работает"

Убедитесь, что TextView готов к прослушиванию состояний, на которые вы подаете заявку. Например, чтобы иметь возможность достигнуть «state_pressed», ваш textView должен быть интерактивным:

 android:clickable="true" 

EDIT: Там мы идем. Этот макет выполняет эту работу. Обратите внимание, что представление, которое собирает событие click, представляет собой 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: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)); 

Это все.

Убедитесь, что все макеты, которые могут обертывать ваши текстовые элементы перед вашим «интерактивным» макетом, также имеют duplicateParentState = «true», в противном случае текстовое представление не достигнет состояния элемента, которое вы хотите.

Я думаю, что использование 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); 

Вы должны установить это в своем коде: android:clickable="true" для TextViews