Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

android:clickable="true"

ИЗМЕНИТЬ: Мы идем. Этот макет выполняет эту работу. Обратите внимание, что представление, которое собирает событие 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>

Это должно быть.

Ответ 2

Не нужно устанавливать 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));


 Все это.

Ответ 3

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

Ответ 4

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

Ответ 5

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