2012-09-14 14 views
15

Voglio impostare un angolo arrotondato per un pulsante in Android insieme a cambiare il colore del pulsante quando selezionato. Sto facendo le seguenti cose.Come impostare il colore di selezione del pulsante insieme agli angoli arrotondati in Android?

drawable/push_button.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" >  
    <item android:state_pressed="true" android:drawable="@color/green"/> 
    <item android:state_focused="true" android:drawable="@color/green"/> 
    <item android:state_focused="false" android:drawable="@color/green"/> 
    <item android:state_pressed="false" android:drawable="@color/red"/> 
    <item android:drawable="@drawable/push_button_background"/>   
</selector> 

drawable/push_button_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    > 
    <solid android:color="#3F4040"/> 
    <corners 
    android:radius="7dp" 
    /> 
</shape> 

e nel codice, sto usando

android:background="@drawable/push_button" 

Qui, il problema è, colori dei pulsanti sono impostati correttamente quando selezionato & deselezionato. Ma gli angoli arrotondati non funzionano.

Come fare? Se uso

android:background="@drawable/push_button_background" 

poi, angoli arrotondati stanno lavorando, ma il cambiamento di colore pulsante di selezione non funziona

Come implementare questo?

Ho indicato il collegamento this. Anche allora nessun aiuto !!

+0

potrebbe essere necessario definire un altro paio di 'drawable' con i colori desiderati e tutti con raggio, e cambiare' @ colore/colore' per i 'drawable 'definiti. – Aprian

+0

@Aprian .. puoi per favore elaborare un po 'di più? Sono un novizio per Android !! puoi dare qualche esempio? – Bharath

risposta

51

Ho trovato risposta alla mia domanda con pochi tentativi di errore di prova &.

Ecco la soluzione.

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

<item android:state_pressed="true"> 
    <shape > 
    <solid android:color="@color/green"/> 
    <corners 
    android:radius="7dp"/> 
    </shape> 
</item> 

<item android:state_focused="true" > 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <solid android:color="@color/green"/> 
    <corners 
    android:radius="7dp"/> 
    </shape> 
</item> 

<item android:state_focused="false" > 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <solid android:color="@color/red"/> 
    <corners 
    android:radius="7dp"/> 
    </shape> 
</item> 

<item android:state_pressed="false" > 
    <shape xmlns:android="http://schemas.android.com/apk/res/android" > 
    <solid android:color="@color/red"/> 
    <corners 
    android:radius="7dp" 
    /> 
    </shape> 
</item> 

</selector> 
2

Quello che ho fatto è stato definito la forma e specificare il dp di ogni angolo.

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

</shape> 

Se si aumenta il dp in ogni angolo, il pulsante verrà arrotondato.

+0

@zabawaba .. No .. Non funziona !! L'ho fatto anche io !! – Bharath

+0

Hai provato a usare uno stile?Si consiglia di crearne uno per un pulsante e quindi applicarlo ai pulsanti di sempre. Non l'ho ancora provato per i pulsanti, ma so che è possibile aggiungere selettori e modificare i diversi aspetti di una vista (altezza, colore, selettore, immagini, ecc.) Usando uno stile. – zabawaba99

0

Ho avuto successo nel fare esattamente quello che stai descrivendo. Ho fatto quanto segue:

In primo luogo, ho creato una nuova classe che estende Button. In questa classe, ho creato un metodo chiamato setState():

public void setState (int s) 
{ 
    if (s > 0 && s < 4 &&) 
    { 
     this.state = s; 
     switch (state) 
     { 
      case 1: 
       setBackgroundDrawable (def_gray); 
       break; 

      case 2: 
       setBackgroundDrawable (lt_gray); 
       break; 

      case 3: 
       setBackgroundDrawable (black); 
     } 
    } 
} 

I tre sfondo drawable che vedete qui sopra sono file XML che descrivono l'aspetto tasto. Sono per lo più uguali, ma variano nel set di colori per ognuno. Il pulsante grigio di default è descritto in questo modo:

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

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

    <item> 

     <shape> 

      <gradient 
       android:startColor="#333333" 
       android:endColor="#333333" /> 

      <stroke 
       android:width="2dp" 
       android:color="@android:color/white" /> 

      <corners 
       android:radius="5dp" /> 

      <padding 
       android:left="2dp" 
       android:top="2dp" 
       android:right="2dp" 
       android:bottom="2dp" /> 

     </shape> 

    </item> 

</selector> 

Per quanto ne so, che formato XML si aspetta di essere utilizzato per configurare una sfumatura di colore sul viso tasto. Dato che non era quello che volevo, ho impostato entrambi i valori cromatici allo stesso modo e il colore dello sfondo è coerente. Potresti aver bisogno di sperimentare un po 'con i valori dei colori, ma sembra che tu abbia già una possibilità.