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

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

 <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"
   />

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

6 ответов

Решение

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

<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"

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

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. res-valuse и откройте colors.xml 2.copy 1 определенного текста, например, #FF4081 и измените имя для экземпляра i, изменив его на белый, и измените его значение, например для i изменили на #FFFFFF для значение белого, как это

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

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

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

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

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

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

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

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

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));

Использование getColorStateList как это

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

вместо getColor

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

если вы хотите изменить цвет фона кнопки, вы можете перейти в res/values/themes/themes.xml и изменитьTheme.MaterialComponents.DayNight.DarkActionBarкTheme.AppCompat.Light.NoActionBar

Другие вопросы по тегам