Использование селектора для изменения цвета текста TextView - PullRequest
42 голосов
/ 02 апреля 2012

Я пытаюсь использовать 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 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");

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

Ответы [ 10 ]

88 голосов
/ 19 марта 2013

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)Второй вариант: если вы используете textview в 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" />
51 голосов
/ 30 июня 2013

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

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

29 голосов
/ 02 апреля 2012

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

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

11 голосов
/ 23 августа 2014

Просто сделайте Selector для 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 голосов
/ 09 июля 2015

@ 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);
2 голосов
/ 02 апреля 2012
<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" />
1 голос
/ 12 октября 2018

Создайте селектор (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));

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

1 голос
/ 08 марта 2013

Вот ссылка на разработчиков Android http://developer.android.com/guide/topics/resources/color-list-resource.html

0 голосов
/ 22 мая 2018

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

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

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

0 голосов
/ 02 апреля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...