Android: textColor tombol nonaktif di pemilih tidak muncul?

98

Saya mencoba membuat tombol dengan selektor tombol saya dapat memiliki status berikut:

  • Diaktifkan dinonaktifkan
  • Ditekan / Tidak Ditekan

Menurut negara bagian yang disebutkan di atas. Saya perlu memanipulasi tombol:

  • Warna teks
  • gambar latar belakang

Tombol ini mulai saya dinonaktifkan sehingga harus memiliki textColor dinonaktifkan dan latar belakang tombol dinonaktifkan. Tapi saya bisa melihat textColor default (ditentukan dalam gaya) dan TIDAK ADA gambar latar belakang!

Ini adalah button_selector.xml selektor saya

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

Dan inilah deklarasi tombol saya di layout.xml saya

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

Dan akhirnya ini adalah gaya saya (di mana textColor default saya diatur)

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

Tolong bantu!

Nouran H.
sumber

Jawaban:

251

Anda juga perlu membuat ColorStateListwarna teks untuk mengidentifikasi status berbeda.

Lakukan hal berikut:

  1. Buat file XML lain dengan res\colornama seperti 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. Di Anda style.xml, letakkan referensi ke text_color.xmlfile itu sebagai berikut:

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

Ini harus menyelesaikan masalah Anda.

Adil Soomro
sumber
1
tidakkah Anda perlu menyimpan file text_color.xml Anda di / res / drawable (bukan / res / color) jika Anda merujuknya dengan @ drawable / text_color?
Erwan
1
@Erwan terima kasih atas koreksinya. sebenarnya jika Anda melihat riwayat edit, saya mempostingnya sebagai folder drawable, dan beberapa orang baik mengeditnya menjadi warna tetapi lupa memperbaruinya ke @colordalam buttyStyle. Sekarang sudah diperbarui.
Adil Soomro
5
text_color.xmltidak mengkompilasi (bagi saya, setidaknya) kecuali saya menempatkannya di drawablefolder, yang mana persyaratan merujuknya sebagai@drawable/text_color
Al Lelopath
@ mickey ya, Anda benar, jadi jika Anda melihat riwayat edit, awalnya disarankan dalam drawable, tetapi seseorang memperbaruinya ke folder warna, sekarang saya telah memperbaikinya.
Adil Soomro
1
@ D3LIC1OU5 jika Anda melihat komentar, kedua cara telah diberitahu untuk bekerja. Saya baru saja membaca dokumentasi dan colorfolder yang benar untuk Sumber Daya Daftar Status Warna Hasil edit Anda diterima.
Adil Soomro
7

1. Buat folder warna di / res / folder dan di folder warna buat di xml:

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. Sekarang Buat tata letak xml: -

 <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"/>  
Bhaskar Kumar Singh
sumber
4

Solusi paling mudah adalah mengatur filter warna ke gambar latar belakang dan tombol seperti yang saya lihat di sini

Anda dapat melakukan sebagai berikut:

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

Semoga saya membantu seseorang ...

Woody
sumber
Ini adalah cara yang bagus untuk melakukan ini secara dinamis, saat Anda tidak memiliki gambar latar tombol sebelumnya. Tapi ini tidak menangani warna teks.
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" />

Saya tidak dapat melihat tombol Anda diabling dalam layout xml Anda. tambahkan ini ke tata letak tombol Anda.

android:enabled="false"

jadi tata letak Tombol Anda akan menjadi,

<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
sumber
@ Aqif Hamid Saya melakukannya secara terprogram button.setEnabled (false) dalam metode onCreat () saya
Nouran H
-1

Anda dapat membuat daftar warna

lokasi file:

res/color/filename.xml

Nama file akan digunakan sebagai ID sumber daya.

referensi sumber daya:

Di Jawa: R.color.filename

Dalam XML: @[package:]color/filename

sintaksis:

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

Contoh:

File XML disimpan di 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>

XML tata letak ini akan menerapkan daftar warna ke Tampilan:

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

Lihat: Referensi Daftar Warna

Lal Krishna
sumber