Android: TextFarbe der deaktivierten Schaltfläche in der Auswahl wird nicht angezeigt?

97

Ich versuche, eine Schaltfläche mit einem Selektor zu erstellen. Meine Schaltfläche kann die folgenden Zustände haben:

  • Aktiviert deaktiviert
  • Gedrückt / nicht gedrückt

Nach den oben genannten Staaten. Ich muss die Tasten manipulieren:

  • Textfarbe
  • Hintergrundbild

Die Schaltfläche beginnt mit meiner Deaktivierung, daher sollte sie die deaktivierte Textfarbe und den Hintergrund der deaktivierten Schaltfläche enthalten. Aber ich kann die Standard-Textfarbe (im Stil angegeben) und KEIN Hintergrundbild sehen!

Hier ist mein Selektor 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>

Und hier ist meine Button-Deklaration in meiner layout.xml

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

Und schließlich ist dies mein Stil (wo meine Standard-Textfarbe festgelegt ist)

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

Bitte helfen Sie!

Nouran H.
quelle

Antworten:

249

Sie müssen auch eine ColorStateListfür Textfarben erstellen , die verschiedene Zustände identifizieren.

Mach Folgendes:

  1. Erstellen Sie eine weitere XML-Datei mit dem res\colorNamen so etwas wie 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. Fügen Sie in Ihrer Datei style.xmleinen Verweis auf diese text_color.xmlDatei wie folgt ein:

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

Dies sollte Ihr Problem beheben.

Adil Soomro
quelle
1
Müssen Sie Ihre Datei text_color.xml nicht in / res / drawable (anstelle von / res / color) speichern, wenn Sie mit @ drawable / text_color darauf verweisen?
Erwan
1
@Erwan danke für die Korrektur. Wenn Sie den Bearbeitungsverlauf sehen, habe ich ihn als Zeichenordner veröffentlicht, und ein netter Kerl hat ihn in Farbe bearbeitet, aber vergessen, ihn @colorin buttyStyle zu aktualisieren . Jetzt ist es aktualisiert.
Adil Soomro
4
text_color.xmlkompiliert nicht (zumindest für mich), es sei denn, ich drawable@drawable/text_color
lege
@mickey Ja, Sie haben Recht. Wenn Sie also den Bearbeitungsverlauf sehen, wurde er ursprünglich in Drawable vorgeschlagen, aber jemand hat ihn in den Farbordner aktualisiert. Ich habe ihn jetzt korrigiert.
Adil Soomro
1
@ D3LIC1OU5 Wenn Sie sich die Kommentare ansehen, wurden beide Möglichkeiten angewiesen, zu funktionieren. Ich habe gerade die Dokumentation konsultiert und bin der colorrichtige Ordner für die Color State List Resource. Ihre Bearbeitung ist willkommen.
Adil Soomro
7

1.Erstellen Sie einen Farbordner in / res / und einen Farbordner in 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.Jetzt ein XML-Layout erstellen: -

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

Die einfachste Lösung besteht darin, den Farbfilter auf das Hintergrundbild und die Schaltfläche einzustellen, wie ich hier gesehen habe

Sie können wie folgt vorgehen:

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

Hoffe ich habe jemandem geholfen ...

Woody
quelle
Dies ist eine gute Möglichkeit, dies dynamisch zu tun, wenn Sie das Hintergrundbild der Schaltfläche nicht im Voraus haben. Dies kümmert sich jedoch nicht um die Textfarbe.
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" />

Ich kann die Deaktivierung Ihrer Schaltfläche in Ihrer Layout-XML nicht sehen. Fügen Sie dies Ihrem Schaltflächenlayout hinzu.

android:enabled="false"

So wird Ihr Button-Layout sein,

<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
quelle
@ Aqif Hamid Ich mache das programmgesteuert button.setEnabled (false) in meiner onCreat () -Methode
Nouran H
-1

Sie können eine Farbliste erstellen

Speicherort:

res/color/filename.xml

Der Dateiname wird als Ressourcen-ID verwendet.

Ressourcenreferenz:

In Java: R.color.filename

In XML: @[package:]color/filename

Syntax:

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

Beispiel:

XML-Datei gespeichert unter 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>

Dieses Layout-XML wendet die Farbliste auf eine Ansicht an:

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

Siehe: Farblistenreferenz

Lal Krishna
quelle