Android Button Selector


115

Dies ist eine Tastenauswahl, bei der sie normal rot und grau angezeigt wird, wenn sie gedrückt wird.

Ich möchte fragen, wie der Code direkt weiter modifiziert werden kann, sodass sich beim DRÜCKEN auch die Textgröße und -farbe ändern können. Danke vielmals!

<item android:state_pressed="true" >         
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="@color/grey"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>    
</item>

<item>
    <shape xmlns:android="http://schemas.android.com/apk/res/android"> 
        <stroke android:width="2dp" android:color="@color/black" />
        <solid android:color="#FF6699"/>
        <padding android:left="5dp" android:top="2dp" 
            android:right="5dp" android:bottom="2dp" /> 
        <corners android:radius="5dp" /> 
    </shape>
</item>

Antworten:


217

Sie müssen nur Satz selectorvon buttonin Ihrer Layout - Datei.

<Button
     android:id="@+id/button1"
     android:background="@drawable/selector_xml_name"
     android:layout_width="200dp"
     android:layout_height="126dp"
     android:text="Hello" />

und fertig.

Bearbeiten

Es folgt eine button_effect.xmlDatei im drawableVerzeichnis

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@drawable/numpad_button_bg_selected" android:state_selected="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_pressed" android:state_pressed="true"></item>
    <item android:drawable="@drawable/numpad_button_bg_normal"></item>

</selector>

Hier können Sie sehen, dass es 3 Drawables gibt. Sie müssen diesen button_effectStil nur auf Ihren setzen button, wie ich oben geschrieben habe. Sie müssen nur ersetzen , selector_xml_namemit button_effect.


Könnten Sie bitte näher erläutern, wie der Status "gedrückt" und "nicht gedrückt" eingestellt wird? (mit allen oben genannten Komponenten wie runder Farbe, Strich usw.). Danke vielmals!
Pearmak

Der beste Weg , den Wähler zu implementieren , ist die Verwendung der XML verweisen diese blazin.in/2016/03/how-to-use-selectors-for-botton.html i implementiert gemäß dieser und seine Arbeits
Bhushan Shirsath

Hallo, ich weiß, es ist eine Weile her, dass du diesen Beitrag geschrieben hast, aber vielleicht weißt du, was ich vermisse. Ich habe Ihren Code verwendet und meine Schaltfläche ist immer grün, dann ändert sich für gedrückt = wahr und ausgewählt = wahr die Zeichenbarkeit in grau, aber die Schaltfläche vor dem Öffnen anderer Aktivitäten hat den Standard-Android-Stil. Irgendeine Idee, welchen Zustand ich vermisse?
Volfk

27

Sie können keine Änderung der Textgröße mit einer zeichnbaren Statusliste erreichen . So ändern Sie die Textfarbe und -größe:

Textfarbe

Um die Textfarbe zu ändern, können Sie erstellen Farbzustand Liste Ressource . Es handelt sich um eine separate Ressource im res/color/Verzeichnis. In Layout-XML müssen Sie es als Wert für das android:textColorAttribut festlegen . Die Farbauswahl enthält dann ungefähr Folgendes:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:color="@color/text_pressed" />
    <item android:color="@color/text_normal" />
</selector>

Textgröße

Sie können die Größe des Textes nicht einfach mit Ressourcen ändern. Es gibt keinen "Dimen Selector". Sie müssen es im Code tun. Und es gibt keine einfache Lösung.

Die wahrscheinlich einfachste Lösung besteht darin View.onTouchListener(), die Auf- und Ab-Ereignisse entsprechend zu nutzen und zu behandeln. Verwenden Sie so etwas:

view.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change text size to the "pressed value"
                return true;
            case MotionEvent.ACTION_UP:
                // change text size to the "normal value"
                return true;
            default:
                return false;
            }
        }
});

Eine andere Lösung könnte darin bestehen, die Ansicht zu erweitern und die setPressed(Boolean)Methode zu überschreiben . Die Methode wird intern aufgerufen, wenn der geänderte Zustand geändert wird. Ändern Sie dann die Größe des Textes im Methodenaufruf entsprechend (vergessen Sie nicht, den Super aufzurufen).


14

Erstellen Sie custom_selector.xml in einem Zeichenordner

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/unselected" android:state_pressed="true" />
   <item android:drawable="@drawable/selected" />
</selector>

Erstellen Sie die Form selected.xml in einem zeichnbaren Ordner

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/selected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Erstellen Sie eine unselected.xml-Form in einem zeichnbaren Ordner

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" android:padding="90dp">
   <solid android:color="@color/unselected"/>
   <padding />
   <stroke android:color="#000" android:width="1dp"/>
   <corners android:bottomRightRadius="15dp" android:bottomLeftRadius="15dp" android:topLeftRadius="15dp" android:topRightRadius="15dp"/>
</shape>

Fügen Sie die folgenden Farben für den ausgewählten / nicht ausgewählten Status in der Datei color.xml des Werteordners hinzu

<color name="selected">#a8cf45</color>
<color name="unselected">#ff8cae3b</color>

Sie können komplette Lösung überprüfen von hier


2

Der beste Weg, den Selektor zu implementieren, ist die Verwendung der XML-Datei anstelle der programmgesteuerten Methode, da die Implementierung mit XML einfacher ist.

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@drawable/button_bg_selected" android:state_selected="true"></item>
        <item android:drawable="@drawable/button_bg_pressed" android:state_pressed="true"></item>
        <item android:drawable="@drawable/button_bg_normal"></item>

    </selector>

Für weitere Informationen habe ich über diesen Link http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html implementiert


2

In der XML-Datei Layout

<Button
 android:id="@+id/button1"
 android:background="@drawable/btn_selector"
 android:layout_width="100dp"
 android:layout_height="50dp"
 android:text="press" />

btn_selector.xml

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

 <item android:drawable="@drawable/btn_bg_selected" android:state_selected="true"></item>
<item android:drawable="@drawable/btn_bg_pressed" android:state_pressed="true"></item>
<item android:drawable="@drawable/btn_bg_normal"></item>


1

Sie können diesen Code verwenden:

<Button
android:id="@+id/img_sublist_carat"
android:layout_width="70dp"
android:layout_height="68dp"
android:layout_centerVertical="true"
android:layout_marginLeft="625dp"
android:contentDescription=""
android:background="@drawable/img_sublist_carat_selector"
android:visibility="visible" />

(Auswahldatei) img_sublist_carat_selector.xml:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:state_focused="true" 
       android:state_pressed="true"        
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:state_pressed="true" 
       android:drawable="@drawable/img_sublist_carat_highlight" />
 <item android:drawable="@drawable/img_sublist_carat_normal" />
</selector>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.