Использование селектора для изменения цвета текста 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");
Я знаю, что цвет текста должен быть белым в любом случае, но это не так.
Ответы
Ответ 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_selector" />
Ответ 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" />
Ответ 7
Вот ссылка на разработчиков Android
http://developer.android.com/guide/topics/resources/color-list-resource.html
Ответ 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
Самое простое и эффективное решение:
- создайте свой селектор цветов Xml в res/color/your_color.xml
- Используйте 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"