Android özelleştirilmiş düğmesi; metin rengini değiştirme


251

Arka planı farklı durumlarda çizilebilir olarak değiştiren bir düğme yaptım, bu şekilde:

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

Burada sorun da çizilebilir ile yaptığım gibi textColor değiştirmeye çalışıyorum ama yapamıyorum. Android: textColor ve android: color'ı zaten denedim, ancak saniyeler arka planımı değiştirirken ilk çalışmıyor.

Sonraki kod düzenimin bir parçası. Metin rengiyle ilgili olarak, yalnızca normal durum metni rengi için çalışır, böylece basıldığında beyaza dönüştürülmez

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

Kimsenin ipucu var mı?

Yanıtlar:


580

Düğmeniz için, tıpkı arka plan için yaptığınız gibi durum bilgisi olan bir renk oluşturun, örneğin:

<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 dosyasını res / drawable klasöründeki bir dosyaya yerleştirin; res / drawable / button_text_color.xml. Ardından çekilebilir metni metin rengi olarak ayarlayın:

android:textColor="@drawable/button_text_color"

15
(En azından benim için), yanıtınızda olduğu gibi dosyanın sonuna "normal" durumun (<item android: color = "# ffffff" />) yerleştirilmesi gereken bir hata olduğunu unutmayın. Normal durumu dosyanın üstüne (diğer durumların üstünde) yerleştirmek seçicinin çalışmasını durdurur.
Chris Blunt

58
bu bir hata değil. Devlet seçiminin bu şekilde çalışması gerekiyordu. En iyi eşleşme değil , yerine uyan ilk şey bunu başaracak.
superjos

Bunu bir tamsayı değeri ile nasıl yaparsınız? Metin dolgu ile benzer bir şey yapmaya çalışıyorum.
elimirks

boşuna denemek için biraz zaman geçirdim, sonra hala textcolor özelliği yerine background özelliğine ayarlamış olduğunu keşfettim. Metin rengini görmek için kullanılmaz bir çekilebilir almak!
Odaym

20
Renk seçicinin res/colorklasörde bulunması daha iyi olur . Ve çağrı yaparken, şunu kullanın:android:textColor="@color/button_text_color"
Justin

16

Bunu yapmanın başka bir yolu da sınıfınızda:

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
Bu, düğmedeki metin rengini değiştirir, ancak düğmenin farklı durumları (örn. Basılı) sırasında bu rengi korur. Çoğu senaryoda, bir durum sırasında bir düğmenin arka plan rengi değiştiğinde, düğmenin metin rengini de değiştirmek istenir, bu da @Konstantin Burov'un cevabının kullanışlı olduğu yerdir.
Dzhuneyt

1
Bu asıl soruya cevap vermiyor. Soru, durum tabanlı çizilebilir kağıtlar ayarlayabileceğiniz gibi, durum tabanlı renklerin bir metin görünümüne nasıl tanımlanacağıyla ilgilidir.
simyacı

4

ok çok basit ilk önce 1'e gidin. res-valuse ve open colors.xml 2. tanımlı metnin 1 kopyasını örneğin # FF4081 yazın ve örneğin adını beyaza değiştirdim ve değerini değiştirin, örneğin #FFFFFF olarak değiştirdim bunun gibi beyaz değer

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

sonra düğmenizin içine bu satırı ekleyin

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

Tamam b3 düğmemin adıdır, bu yüzden ur düğmesinin adını değiştirdiyseniz, farklı rengi değiştirirseniz beyazı kullanırsanız, sonra beyazınızı renginizin adına değiştirirseniz, önce tüm renkler aynı olacaktır, ancak önce bu rengi renklerde tanımlamış olursunuz. ben pont 2 açıkladı gibi xml


1

Düğmenin metin rengini değiştirme

Çünkü bu yöntem artık kullanımdan kaldırıldı

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

Aşağıdakileri kullanıyorum:

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

0

Bunun getColorStateListgibi kullan

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

onun yerine getColor

setTextColor(resources.getColor(R.color.button_states_color))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.