2015-06-23 10 views
7

değiştirir. Burada varsayılan olarak görünür:Android düğmesi arka plan rengi benim Android uygulaması için yerleşik bir tema kullanıyorum düğme boyutunu

default

İşte bu butona (android:background="@color/play_bg") bir arka plan renk eklemek ne olur:

enter image description here

Hey !? Temelde tüm düğmelerin büyüklüğü, dolgusu ve kenar boşluklarını değiştirdi!

yüzden backgroundTint özelliği ( android:backgroundTint="@color/play_bg") kullanılarak beklenen sonuç almak başardı:

enter image description here

Maalesef bu sadece benim için kabul edilemez API, sürüm 21 beri desteklenmektedir.

Yani iki soru:

  • Neden düğmenin özelliklerinin kalanı ile arka plan pisliklerimizi değişiyor mu?
  • backgroundTint olmadan beklenen sonucu nasıl alabilirim?

Ve bir bonus sorusu: Programlı olarak beklenen sonucu nasıl alabilirim (uygulamanızda dinamik düğmeler var, bu yüzden bu çok yararlı olur)?

cevap

9

Bu rengi Java Dosyanızda değiştirebilirsiniz. Ana sınıfınız yüklendiğinde, bu düğmenin bir nesnesini alabilir ve ardından rengi değiştirebilirsiniz. İşte

Eğer Manifest dosyasında bu düğmeye anladığım bu:

Java dosyasında Şimdi
<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="PLAY" 
android:id="@+id/btn1" 
... /> 

Eğer

Ayrıca RENGİ kullanabilir
Button b = (Button)findViewByID(R.id.btn1); 
b.getBackground().setColorFilter(0xFFFF0000,PorterDuff.Mode.MULTIPLY); 

gereken bu XML düzeni ekliyoruz: COLOR.RED bazen aşağıdaki kod benim için çalışmıyor : - b.setBackgroundColor (int renk)

+2

Güzel oluşturulmasının daha kolay bir yol olan bu link kullanabilirsiniz. İşe yarıyor! Tamlık için, 'PorterDuff.mode.MULTIPLY''in ne yaptığını açıklayabilir misiniz? Ayrıca, "android: background =" @ color/... "' ile "sezgisel" çözümün neden çalışmadığını biliyor musunuz? –

+0

Grafik Uygulamasını tasarlarken esas olarak PorterDuff kullanıyoruz. PorterDuff, görüntüleri birbirinin üzerine yerleştirilmiş "düzensiz şekilli karton parçaları" gibi birleştirme ve aynı zamanda üst üste binen parçaların karıştırılması için bir şema gibi birleştirme yolu olarak tarif edilmektedir. http://ssp.impulsetrain.com/porterduff.html java.lang.Object ↳ \t java.lang.Enum \t ↳ \t android.graphics.PorterDuff.Mode Referans: http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html –

+0

kendi ana yaklaşım neden işe yaramadığını sorunuza gelince: Arka plan kullandığınızda, metnin olduğu kısım için arka plan değiştirildi. Arka plan, kullandığınız Metin boyutuna bağlıdır. Tüm arka plan değişikliği için setColorFiller (Color.RED) gerekebilir –

1

Benim durumumda bu süreçte

<Button 
    android:id="@+id/button1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="3dp" 
    android:background="@color/play_as" 
    android:padding="8dp" 
    android:text="Button" /> 

içinde yapacağız Yoksa düğmeleri

İlgili konular