2012-12-24 9 views
76

Questo è un selettore di pulsanti tale che quando è normale appare rosso, se premuto appare grigio.selettore pulsante Android

Mi piacerebbe chiedere come potrebbe essere ulteriormente modificato il codice in modo tale che quando PREMUTO la dimensione del testo e il colore potrebbero anche cambiare? Grazie molto!

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

risposta

171

Hai solo bisogno di impostare selector di button nel file di layout.

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

e fatto.

Modifica

seguito è button_effect.xml file nella drawable directory

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

In questo, si può vedere che ci sono 3 drawable, non vi resta che mettere questo stile button_effect al tuo button, come ho scritto sopra. Hai solo bisogno di sostituire selector_xml_name con button_effect.

+0

la prego di elaborare più per come impostare lo stato stampato e non pressato? (con tutti i componenti sopra come colore rotondo, tratto, ecc.). Grazie molto! – pearmak

+0

Il modo migliore per implementare il selettore è usando il xml rimandare questo http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html l'ho implementato come da questo e funziona –

+1

Grazie, ha funzionato –

18

Non è possibile ottenere la modifica della dimensione del testo con un state list drawable. Per modificare il colore del testo e la dimensione del testo fanno questo:

Testo colore

Per modificare il colore del testo, è possibile creare color state list resource. Sarà una risorsa separata situata nella directory res/color/. In layout xml devi impostarlo come valore per l'attributo android:textColor. Il selettore colore conterrà quindi qualcosa di simile:

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

Dimensioni testo

Non è possibile modificare le dimensioni del testo semplicemente con le risorse. Non esiste un "selen dimen". Devi farlo nel codice. E non c'è una soluzione semplice.

Probabilmente la soluzione più semplice potrebbe essere l'utilizzo di View.onTouchListener() e gestire gli eventi su e giù di conseguenza. Usa qualcosa come questo:

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; 
      } 
     } 
}); 

Una diversa soluzione potrebbe essere quella di estendere la vista e l'override del metodo setPressed(Boolean). Il metodo viene chiamato internamente quando si verifica la modifica dello stato premuto. Quindi modifica la dimensione del testo di conseguenza nella chiamata al metodo (non dimenticare di chiamare il super).

+0

Questo file Xml si blocca su Kitkat Device ..... –

0

È possibile utilizzare questo codice:

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

(selettore file) 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> 
9

Crea custom_selector.xml nella cartella drawable

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

creare la forma selected.xml nella cartella drawable

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

creare la forma unselected.xml nella cartella drawable

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

Add seguendo i colori per selezionato Stato/non selezionato in cartella color.xml dei valori

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

è possibile controllare soluzione completa da here

+0

codice perfetto, felice :) –

1

modo migliore per attuare il selettore è quello di utilizzare l'XML invece di utilizzare modo programmatico come la sua più facile da implemnt con XML.

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

Per ulteriori informazioni ho implementato utilizzando questo link http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

0

In Layout .xml

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