Android: Seçicideki devre dışı düğmesinin textColor'u görünmüyor mu?


102

Seçiciyle bir düğme yapmaya çalışıyorum düğmem aşağıdaki durumlara sahip olabilir:

  • Etkin / Devre Dışı
  • Basıldı / Basılmadı

Yukarıda belirtilen eyaletlere göre. Düğmeyi değiştirmem gerekiyor:

  • Metin rengi
  • arka plan görüntüsü

Düğme, devre dışı bırakılmamla başlar, bu nedenle devre dışı bırakılmış textColor ve devre dışı bırakılmış düğme arka planına sahip olmalıdır. Ancak varsayılan textColor (stilde belirtilmiş) ve arka plan resmi YOK görebiliyorum!

İşte seçicim button_selector.xml

<?xml version="1.0" encoding="utf-8"?>

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="false"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button" />    

    <item android:state_pressed="true"
        android:state_enabled="true"
        android:drawable="@drawable/button_pressed"/>

    <item android:state_pressed="true"
        android:state_enabled="false"
        android:textColor="#9D9FA2"
        android:drawable="@drawable/button"/>

    <item android:state_pressed="false"
        android:state_enabled="true"
        android:drawable="@drawable/button"/>    

</selector>

Ve işte layout.xml dosyamdaki düğme bildirimim

    <Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Ve son olarak bu benim tarzım (varsayılan textColor'umun ayarlandığı yer)

<?xml version="1.0" encoding="utf-8"?>

 <resources>

     <style name="buttonStyle">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">#282780</item>
      <item name="android:textSize">18sp</item>
     </style>

</resources>

Lütfen yardım et!

Yanıtlar:


253

ColorStateListFarklı durumları tanımlayan bir metin renkleri de oluşturmanız gerekir .

Aşağıdakileri yapın:

  1. res\colorGibi adlandırılmış başka bir XML dosyası oluşturun text_color.xml.

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!-- disabled state -->
      <item android:state_enabled="false" android:color="#9D9FA2" /> 
      <item android:color="#000"/>
    </selector>
    
  2. Bu dosyaya aşağıdaki gibi style.xmlbir referans ekleyin text_color.xml:

    <style name="buttonStyle" parent="@android:style/Widget.Button">
      <item name="android:textStyle">bold</item>
      <item name="android:textColor">@color/text_color</item>
      <item name="android:textSize">18sp</item>
    </style>
    

Bu, sorununuzu çözmelidir.


1
@ drawable / text_color ile başvurursanız text_color.xml dosyanızı / res / drawable (/ res / color yerine) içine kaydetmeniz gerekmez mi?
Erwan

1
@Erwan düzeltme için teşekkürler. Aslında düzenleme geçmişini görürseniz, onu çekilebilir klasör olarak gönderdim ve hoş bir adam onu ​​renklendirmek için düzenledi, ancak @colorbuttyStyle'da güncellemeyi unuttu. Şimdi güncellendi.
Adil Soomro

6
text_color.xmldrawable@drawable/text_color
Al Lelopath

@mickey evet, haklısınız, bu yüzden düzenleme geçmişini görürseniz, başlangıçta çekilebilir olarak önerildi, ancak birisi onu renkli klasöre güncelledi, şimdi onu düzelttim.
Adil Soomro

1
@ D3LIC1OU5 Yorumlara bakarsanız, her iki yolun da çalışması söylendi. Dokümantasyona başvurdum ve Renk Durumu Listesicolor için doğru klasör. Kaynak Düzenlemenizi bekliyoruz.
Adil Soomro

7

1. / res / klasöründe ve xml'de renk klasöründe bir renk klasörü oluşturun:

text_color_selector.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <!-- disabled state --> 
<item android:state_enabled="false" android:color="#776678" /> 
 <item android:color="#ffffff"/>
</selector>

2. Şimdi bir xml düzeni oluşturun: -

 <Button

        android:id="@+id/button_search"

        android:layout_width="652dp"

        android:layout_height="48dp"

        android:layout_alignParentLeft="true"

        android:layout_alignParentTop="true"

        android:layout_marginTop="18dp"

        android:background="@android:color/transparent"

        android:text="Hello Bhaskar"

        android:textColor="@color/text_color_selector"/>  

4

En kolay çözüm, renk filtresini arka plan resmine ayarlamak ve burada gördüğüm gibi düğmesine basmaktır .

Aşağıdaki gibi yapabilirsiniz:

if ('need to set button disable')
    button.getBackground().setColorFilter(Color.GRAY, PorterDuff.Mode.MULTIPLY);
else
    button.getBackground().setColorFilter(null);

Umarım birine yardım ettim ...


Bu, önceden düğme arka plan resminiz olmadığında bunu dinamik olarak yapmanın güzel bir yoludur. Ancak bu, metin rengiyle ilgilenmez.
Eran Goldin

-1
<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

Düzen xml'de düğmenizin devre dışı bırakıldığını göremiyorum. bunu düğme düzeninize ekleyin.

android:enabled="false"

bu nedenle Düğme düzeniniz,

<Button android:id="@+id/reserve_button"
        android:text="@string/reserve_button"
        android:layout_width="120dp"
        android:layout_height="40dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="20dp"
        android:enabled="false"
        android:paddingRight="15dp"
        android:layout_gravity="left"
        style="@style/buttonStyle"
        android:background="@drawable/button_selector" />

@ Aqif Hamid onCreat () yöntemimde bu programatik olarak button.setEnabled (false) yapıyorum
Nouran H

-1

Bir renk listesi oluşturabilirsiniz

dosya konumu:

res/color/filename.xml

Dosya adı, kaynak kimliği olarak kullanılacaktır.

kaynak referansı:

Java'da: R.color.filename

XML'de: @[package:]color/filename

sözdizimi:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:color="hex_color"
        android:state_pressed=["true" | "false"]
        android:state_focused=["true" | "false"]
        android:state_selected=["true" | "false"]
        android:state_checkable=["true" | "false"]
        android:state_checked=["true" | "false"]
        android:state_enabled=["true" | "false"]
        android:state_window_focused=["true" | "false"] />
</selector>

Misal:

XML dosyası şuraya kaydedildi res/color/button_text.xml:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true"
          android:color="#ffff0000"/> <!-- pressed -->
    <item android:state_focused="true"
          android:color="#ff0000ff"/> <!-- focused -->
    <item android:color="#ff000000"/> <!-- default -->
</selector>

Bu düzen XML, renk listesini bir Görünüme uygulayacaktır:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/button_text"
    android:textColor="@color/button_text" />

Bakınız: Renk Listesi Referansı

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.