2009-10-07 12 views
98

Sto tentando di ignorare l'aspetto predefinito ToggleButton. Ecco il codice XML che definisce il ToggleButton:Android: specificare due immagini diverse per togglebutton utilizzando XML

<ToggleButton android:id="@+id/FollowAndCenterButton" 
     android:layout_width="30px" 
     android:layout_height="30px" 
     android:textOn="" android:textOff="" android:layout_alignParentLeft="true" 
     android:layout_marginLeft="5px" 
     android:layout_marginTop="5px" android:background="@drawable/locate_me"/> 

Ora, abbiamo due 30 x 30 icone che vogliamo usare per le/gli stati non-cliccato cliccato. In questo momento abbiamo il codice che cambia a livello di codice l'icona di sfondo a seconda dello stato:

centeredOnLocation.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (centeredOnLocation.isChecked()) { 
       centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me_on)); 
      } else { 
       centeredOnLocation.setBackgroundDrawable(getResources().getDrawable(R.drawable.locate_me)); 
      } 
     } 
}); 

Ovviamente sto cercando un modo migliore per farlo. Ho provato a fare un selettore per l'immagine di sfondo, che passa automaticamente tra gli stati:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:drawable="@drawable/locate_me" /> <!-- default --> 
<item android:state_checked="true" 
     android:drawable="@drawable/locate_me_on" /> <!-- pressed --> 
<item android:state_checked="false" 
     android:drawable="@drawable/locate_me" /> <!-- unchecked --> 

Ma questo non funziona; leggere il ToggleButton API (http://developer.android.com/reference/android/widget/ToggleButton.html), risulta che gli unici attributi XML ereditati sono

XML Attributes 
Attribute Name Related Method Description 
android:disabledAlpha  The alpha to apply to the indicator when disabled. 
android:textOff   The text for the button when it is not checked. 
android:textOn  The text for the button when it is checked. 

Non sembra essere l'androide: state_checked attributo, nonostante la classe avente il metodo isChecked() e setChecked().

Quindi, c'è un modo per fare ciò che voglio in XML, o sono bloccato con la mia soluzione disordinata?

+0

Nota, se non si utilizza il testo, penso che sia preferibile utilizzare 'CompoundButton'. – Timmmm

+1

Ignora questo; 'CompoundButton' è astratto! – Timmmm

risposta

159

Il tuo codice è a posto. Tuttavia, il pulsante di attivazione visualizzerà il primo elemento del selettore che corrisponde, quindi il valore predefinito dovrebbe venire per ultimo. Organizzare gli elementi nel modo seguente per assicurarsi che vengano tutti utilizzati:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:state_pressed="true" /> //currently pressed turning the toggle on 
    <item android:state_pressed="true" /> //currently pressed turning the toggle off 
    <item android:state_checked="true" /> //not pressed default checked state 
    <item /> //default non-pressed non-checked 
</selector> 
+3

Ciò ha perfettamente senso; Non ho mai creato la connessione tra selettore e istruzioni switch. – I82Much

+0

Hai fatto la mia giornata ... Ho avuto problemi con il pulsante, la casella di controllo e poi ho provato anche il pulsante radio, finalmente questo post è stato utile. Grazie mille Vitaly Polonetsky e I82Much –

+0

il tuo consiglio mi aiuta davvero. molte grazie. – anticafe

Problemi correlati