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

Использование селектора для изменения цвета текста TextView

Я пытаюсь использовать TextView для определения стиля TabWidget на табусте.

Я просто создал селектор для bgcolor и отлично работает, но я хочу сделать селектор для textColor, но цвет текста не изменяется:

Это мой tab_text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />

</selector>

И это код, когда я пытаюсь использовать в textView:

TextView txtTab=new TextView(this);
        txtTab.setTextColor(R.drawable.tab_text_selector);
        txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
        txtTab.setGravity(Gravity.CENTER);
        txtTab.setText("Agregar Idea");

Я знаю, что цвет текста должен быть белым в любом случае, но это не так.

4b9b3361

Ответ 1

Вы должны использовать getColorStateList(). А для XML см. здесь.

Я тоже боролся с этой проблемой. Если вы хотите использовать state list, вам нужно объявить его в папке ресурсов color вместо папки drawable и использовать метод setTextColor(getResources().getColorStateList(R.color.tab_text_selector)).

Ответ 2

1) Используйте tab_text_selector.xml, как показано ниже, и поместите его в папку res/color:

 
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@android:color/white" />
    <item android:state_focused="true" android:color="@android:color/white" />
    <item android:state_pressed="true" android:color="@android:color/white" />
    <item android:color="#504f4f" /> <!-- default case -->
</selector>

И установите его в текстовое окно, как показано ниже.

TextView tv = (TextView) findViewById(R.id.TextView1) ;
tv.setTextColor(context.getResources().getColor(R.color.tab_text_selector));

2) Второй вариант. Если вы используете текстовое представление в xml вместо использования программно, используйте tab_text_selector.xml, как показано ниже:

<TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="TextView"
    android:textColor="@‌​drawable/tab_text_sel‌​ector" />

Ответ 3

Используйте этот способ:

tab_text_selector.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:state_pressed="true" android:color="#FF111111"/>  
    <item android:state_focused="true" android:color="#FF222222"/>    
    <item android:state_selected="true" android:color="#FF333333"/> 
</selector>

TextView:

TextView txtTab = new TextView(this);

XmlResourceParser xrp = getResources().getXml(R.drawable.tab_text_selector);  
try {  
    ColorStateList csl = ColorStateList.createFromXml(getResources(), xrp);  
    txtTab.setTextColor(csl);  
} catch (Exception e) {  } 

txtTab.setBackgroundResource(R.drawable.tab_bg_selector);
txtTab.setGravity(Gravity.CENTER);
txtTab.setText("Agregar Idea");

Но лучше поместить цвет в /res/color/yourcolor.xml

Ответ 4

Просто сделайте селектор для textcolor

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="@color/drawer_color" />
<item android:state_focused="false" android:color="@android:color/white" />
<item android:state_selected="true" android:color="@color/drawer_color" />

Затем установите для свойства textColor Textview значение clickable = true

<TextView
    android:clickable="true"
    android:textColor="@drawable/text_selector"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/registration"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true" />

Ответ 5

@ffleandro, @ρяσѕρєя K отвечает на лучший вариант, я думаю, что использование 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);

Ответ 6

<item android:state_selected="true" android:color="@android:color/white" />
<item android:state_focused="true" android:color="@android:color/red" />
<item android:state_pressed="true" android:color="@android:color/blue" />

Ответ 8

Создайте селектор (text_color_selector.xml) и поместите его в папку res/color:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorPrimary" android:state_pressed="true" /> <!-- pressed -->
    <item android:color="@color/colorPrimary" android:state_focused="true" /> <!-- focused -->
    <item android:color="@color/light_gray_b" /> <!-- default -->
</selector>

добавьте это в текстовое представление как:

        <TextView
            android:id="@+id/tvMenuName"
            style="@style/TextViewStyle"
            android:layout_marginLeft="@dimen/dimen_15"
            android:layout_marginStart="@dimen/dimen_15"
            android:textColor="@color/text_color_selector"
            android:textSize="@dimen/text_size_16"
            tools:text="Home" />

программно вы можете установить Textview следующим образом:

TextView tv = (TextView) findViewById(R.id.textView) ;
tv.setTextColor(context.getResources().getColor(R.color.text_color_selector));

Надеюсь, это поможет.

Ответ 9

Вы использовали белый цвет во всех случаях фокус, выбранный и нажатый.

Пожалуйста, используйте и тестируйте с другим цветом.

Также должен использоваться случай по умолчанию, при этом определенный цвет говорит черным вместе со всем случаем.. когда не используется какое-либо состояние по умолчанию.

Ответ 10

Самое простое и эффективное решение:

  1. создайте свой селектор цветов Xml в res/color/your_color.xml
  2. Используйте ContextCompat util

Пример.: Txtview.setTextColor(ContextCompat.getColorStateList(context, R.color.tab_tv_selector));

Ответ 11

У меня была другая проблема. Я пытался со всем, что предлагается в этой теме, включая следующие

  • Перемещение селектора из папки drawable в папку color.
  • Настройка android:clickable="true"
  • Установка android:duplicateParentState="true"

Кажется, ничего из этого не работает!

Однако, наконец, мне пришлось очистить проект и заставить селектор работать на моем устройстве. мысль поставить этот опыт в качестве ответа поможет другим разработчикам.

Следовательно, окончательная рабочая версия имела следующее.

  • Файл селектора в папке /res/color
  • И был добавлен в TextView с android:textColor="@color/text_selector"