Dostosowany przycisk dla Androida; zmiana koloru tekstu

251

Zrobiłem przycisk, który zmienia tło do rysowania w różnych stanach, w ten sposób:

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

Problem polega na tym, że próbuję również zmienić textColor, tak jak robię to z rysowalnym, ale nie jestem w stanie tego zmienić. Próbowałem już Androida: textColor i Android: kolor, ale pierwszy nie działa, a sekundy zmieniają moje tło.

Następny kod jest częścią mojego układu. Jeśli chodzi o kolor tekstu, działa on tylko dla normalnego koloru tekstu, nie zmieniając go na biały po naciśnięciu

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

Czy ktoś ma jakiś pomysł?

dwbrito
źródło

Odpowiedzi:

579

Utwórz stanowy kolor dla przycisku, tak jak w przypadku tła, na przykład:

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

Umieść xml w pliku w folderze res / drawable, tj. Res / drawable / button_text_color.xml. Następnie wystarczy ustawić rysunek jako kolor tekstu:

android:textColor="@drawable/button_text_color"
Konstantin Burov
źródło
15
Zauważ, że (przynajmniej dla mnie) istnieje błąd, w którym stan „normalny” (<item android: color = "# ffffff" /> w odpowiedzi) musi znajdować się na końcu pliku, jak w twojej odpowiedzi. Umieszczenie stanu normalnego na górze pliku (ponad innymi stanami) zatrzymuje działanie selektora.
Chris Blunt,
58
to nie błąd. Tak powinien wyglądać wybór stanu. To nie jest najlepszy mecz , zamiast tego pierwszy, który pasuje, przetrwa.
superjos,
Jak to zrobić z liczbą całkowitą? Próbuję zrobić coś podobnego z dopełnieniem tekstu.
elimirks
spędziłem trochę czasu próbując to bezskutecznie, a potem odkryłem, że nadal ustawiłem to na właściwość tła zamiast właściwości textcolor. Nie przyzwyczajony do patrzenia na kolor tekstu, który można wyciągnąć!
Odaym
20
Lepiej, jeśli selektor kolorów znajduje się w res/colorfolderze. A kiedy zadzwonisz, użyj:android:textColor="@color/button_text_color"
Justin
16

Innym sposobem na to jest w twojej klasie:

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);
Michał Yaworski
źródło
1
Spowoduje to zmianę koloru tekstu na przycisku, ale pozostanie tym kolorem w różnych stanach przycisku (np. Naciśnięty). W większości scenariuszy, gdy kolor tła przycisku zmienia się podczas stanu, pożądana jest również zmiana koloru tekstu przycisku, tutaj przydatna jest odpowiedź @Konstantin Burov.
Dzhuneyt
1
To nie odpowiada na pierwotne pytanie. Pytanie dotyczy tego, jak zdefiniować kolory oparte na stanie w widoku tekstowym, tak jak można ustawić tabele rysunkowe oparte na stanie.
alchemik
4

ok bardzo proste najpierw przejdź do 1. res-valuse i otwórz kolory. xml 2. skopiuj 1 zdefiniowany tekst na przykład # FF4081 i zmień nazwę na przykład zmieniłem na biały i zmień jego wartość na przykład zmieniłem na #FFFFFF dla biała wartość jak ta

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

następnie w swoim przycisku dodaj tę linię

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

ok b3 to nazwa mojego przycisku, więc zmieniłem nazwę przycisku ur, wszystkie inne będą takie same, jeśli użyjesz białego koloru, jeśli zmienisz inny kolor, a następnie zmień biały na nazwę swojego koloru, ale najpierw zdefiniujesz ten kolor w kolorach. XML tak jak wyjaśniłem w pont 2

SeekingKnowleges
źródło
1

Zmiana koloru tekstu przycisku

Ponieważ ta metoda jest teraz przestarzała

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

Używam następujących:

button.setTextColor(ContextCompat.getColor(mContext, R.color.your_color));
Gjoko Bozinov
źródło
0

Użyj w getColorStateListten sposób

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

zamiast getColor

setTextColor(resources.getColor(R.color.button_states_color))
Li Jin
źródło