Android - изменение цвета текста при изменении состояния

Как я могу применить цвет к различным состояниям (сфокусированным, нажатым, включенным) TextView?

Я уже говорил об этом: http://developer.android.com/reference/android/content/res/ColorStateList.html, но не знаю, как я могу применить список состояний цвета к TextView? или есть ли другой способ сделать это?

Обновление:

Я хочу изменить цвет фона.

Ответы

Ответ 1

Создайте новый xml (в папке drawable). с цветом вы можете указать изображение для каждого состояния и вы можете установить этот xml в качестве фона

если ваш xml равен 'res/drawable/abc.xml', тогда установите фон как

android:background="@drawable/abc"

Отредактировано для добавления цвета в состояние xml
наш xml, res/drawable/abc.xml

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

Затем объявить серый в your res\values\strings.xml

<color name="gray">#808080</color>

Ответ 2

создать xml под res/color dir.

имя файла примера: selector_white_gray.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="@color/Gray"/> <!-- pressed -->
    <item android:color="@color/White"/> <!-- default -->
</selector>

вы можете добавить больше состояний. вы можете использовать цветовой код типа "#ffffff" вместо предопределенного "@color/White". Becarefull, используйте android: color not android: drawable. этот пример изменяет цвет текста при нажатии на него. установите атрибут textColor для выбора выше.

<TextView
       android:layout_width="wrap_content"
       android:layout_weight="1"
       android:layout_height="wrap_content"
       android:textColor="@color/selector_white_gray"
       android:textSize="18sp" 
       android:textStyle="bold" >
</TextView>

Ответ 3

Если вы хотите изменить цвет текста - вы создаете его как xml в папке res/color (например res/color/mycolor.xml а затем в TextView вы укажете цвет как android:textColor="@color/mycolor"

Для изменения фона см. другой ответ.

Ответ 4

Это легко. Просто перехватите желаемое событие и напишите smth like:

TextView textView=(TextView)findViewById(R.id.myText);
String s=getString(R.string.myText);
SpannableString ss=new SpannableString(s);
ss.setSpan(new ForegroundColorSpan(Color.RED), 0, s.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);
textView.setText(ss);

Ответ 5

textView = (TextView)findViewById(R.id.myTextView);
mMainView.setOnClickListener(new OnClickListener(){

    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub
        textView.setTextColor(Color.GREEN);//set the color here
    }

});