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 так, як це роблю з малюнком, але мені це не вдається. Я вже спробував андроїд: 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"
   />

Хтось має підказку?

Відповіді:


579

Створіть яскравий колір для своєї кнопки, як і для фону, наприклад:

<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 / dravable, тобто res / dravable / button_text_color.xml. Потім просто встановіть текст, що малюється як колір тексту:

android:textColor="@drawable/button_text_color"

15
Зауважте, що (як мінімум, для мене) є помилка, де "нормальний" стан (<елемент android: color = "# ffffff" /> у вашій відповіді) повинен бути розміщений в кінці файлу, як у вашій відповіді. Розміщення нормального стану у верхній частині файлу (над іншими станами) зупиняє роботу селектора.
Кріс Блант

58
це не помилка. Це спосіб, яким має працювати державний відбір. Це не найкращий матч , натомість перший, який підходить, зробить це до кінця.
superjos

Ви як це зробити з цілим значенням? Я намагаюся зробити щось подібне з текстовим накладом.
виключається

витратив деякий час, намагаючись це не принести успіху, а потім виявив, що я все-таки встановлював його на фонову властивість замість властивості 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 та відкрийте color.xml 2.копіюйте 1 визначеного тексту, наприклад, # FF4081 та змініть ім'я, наприклад, я змінив на білий і змінив його значення, наприклад, я змінив на #FFFFFF для біле значення, як це

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

то всередині кнопки додайте цей рядок

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

ОК b3 - це назва моєї кнопки, тому змінена назва кнопки ур, всі інші будуть однаковими, якщо ви використовуєте білий колір, якщо ви змінюєте інший колір, то змініть білий на ім'я вашого кольору, але спочатку ви визначите цей колір у кольорах. xml, як я пояснив у pont 2


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))
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.