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

251

Я сделал кнопку, которая изменяет фон для рисования в разных состояниях, таким образом:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_pressed="true" android:drawable="@drawable/btn_location_pressed" /> <!-- pressed -->
 <item android:state_focused="true" android:drawable="@drawable/btn_location_pressed"/> <!-- focused -->
 <item android:drawable="@drawable/btn_location"/> <!-- default -->

Проблема здесь в том, что я также пытаюсь изменить textColor, как я делаю с рисованием, но я не могу. Я уже пробовал android: textColor и android: color, но первый не работает, а секунды меняют фон.

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

<Button android:id="@+id/location_name"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingTop="5dp"
        android:background="@drawable/location"          
        android:textSize="15sp"
        android:textColor="@color/location_color"
        android:textColorHighlight="#FFFFFF"
   />

У кого-нибудь есть подсказка?

dwbrito
источник

Ответы:

580

Создайте цвет для вашей кнопки, как вы сделали для фона, например:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Focused and not pressed -->
    <item android:state_focused="true" 
          android:state_pressed="false" 
          android:color="#ffffff" />

    <!-- Focused and pressed -->
    <item android:state_focused="true" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Unfocused and pressed -->
    <item android:state_focused="false" 
          android:state_pressed="true" 
          android:color="#000000" />

    <!-- Default color -->
    <item android:color="#ffffff" />

</selector>

Поместите xml в файл в папку res / drawable, т.е. res / drawable / button_text_color.xml. Затем просто установите цвет для рисования:

android:textColor="@drawable/button_text_color"
Константин Буров
источник
15
Обратите внимание, что (по крайней мере для меня) существует ошибка, при которой «нормальное» состояние (<item android: color = "# ffffff" /> в вашем ответе) должно быть помещено в конец файла, как и в вашем ответе. Размещение нормального состояния в верхней части файла (над другими состояниями) останавливает работу селектора.
Крис Блант
58
это не ошибка Это способ, которым выбор государства должен работать. Это не лучший матч , вместо него подходит первый, который подходит.
Superjos
Вы как это сделать с целочисленным значением? Я пытаюсь сделать что-то подобное с заполнением текста.
elimirks
потратил некоторое время, пытаясь это сделать безрезультатно, затем обнаружил, что я все еще устанавливал его в свойство background вместо свойства textcolor. Не привык видеть, как цвет текста берет рисование!
Одэйм
20
Лучше, если селектор цвета находится в res/colorпапке. И когда звоните, используйте:android:textColor="@color/button_text_color"
Джастин
16

Еще один способ сделать это в вашем классе:

import android.graphics.Color; // add to top of class  

Button btn = (Button)findViewById(R.id.btn);

// set button text colour to be blue
btn.setTextColor(Color.parseColor("blue"));

// set button text colour to be red
btn.setTextColor(Color.parseColor("#FF0000"));

// set button text color to be a color from your resources (could be strings.xml)
btn.setTextColor(getResources().getColor(R.color.yourColor));

// set button background colour to be green
btn.setBackgroundColor(Color.GREEN);
Майкл Яворский
источник
1
Это изменит цвет текста на кнопке, но будет сохранять этот цвет во время различных состояний кнопки (например, нажатие). В большинстве сценариев, когда цвет фона кнопки изменяется во время состояния, также желательно изменить цвет текста кнопки, именно здесь ответ @Konstantin Burov пригодится.
Джунейт
1
Это не отвечает на оригинальный вопрос. Вопрос в том, как определить основанные на состоянии цвета для текстового представления так же, как вы можете установить основанные на состоянии рисованные элементы.
алхимик
4

хорошо, очень просто сначала перейдите к 1. res-valuse и откройте colors.xml 2. скопируйте 1 определенного текста, например, # FF4081, и измените имя, например, я изменил на белый и измените его значение, например, я изменил на #FFFFFF для значение белого, как это

<color name="White">#FFFFFF</color>

затем внутри вашей кнопки добавьте эту строку

 b3.setTextColor(ContextCompat.getColor(getApplicationContext(), R.color.White));

ok b3 - это имя моей кнопки, поэтому изменилось название вашей кнопки. Все остальные будут такими же, если вы используете белый цвет, если вы меняете другой цвет, затем меняйте белый на имя вашего цвета, но сначала вы определили этот цвет в цветах. XML, как я объяснил в Pont 2

SeekingKnowleges
источник
1

Изменение цвета текста кнопки

Потому что этот метод сейчас устарел

button.setTextColor(getResources().getColor(R.color.your_color));

Я использую следующее:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));
Гьоко Бозинов
источник
0

Используйте getColorStateListкак это

setTextColor(resources.getColorStateList(R.color.button_states_color))

вместо того getColor

setTextColor(resources.getColor(R.color.button_states_color))
Ли Джин
источник