2015-03-29 15 views
5

Sto tentando di attivare i sottotitoli di sfondo del mio pulsante, in modo che quando l'utente fa clic sul pulsante il suo sfondo viene modificato e quando l'utente fa clic nuovamente sul pulsante, lo sfondo torna a defaul. Ecco il mio codice:Cambia pulsante al livello di disegno programmabile onClick

public void Favorites(View V) { 
    Button star = (Button) findViewById(R.id.buttonStar); 
    if(star.getBackground().equals(R.drawable.btn_star_off)) { 
    star.setBackgroundResource(R.drawable.btn_star_on); 
    } else {    
    star.setBackgroundResource(R.drawable.btn_star_off); 
    } 
} 

Sono abbastanza sicuro che questo non è il modo di utilizzare drawable con if dichiarazioni. Qualcuno può suggerire un modo per farlo?

risposta

7
private boolean isButtonClicked = false; // You should add a boolean flag to record the button on/off state 

protected void onCreate(Bundle savedInstanceState) { 
    ...... 
    Button star = (Button) findViewById(R.id.buttonStar); 
    star.setOnClickListener(new OnClickListener() { // Then you should add add click listener for your button. 
     @Override 
     public void onClick(View v) { 
      if (v.getId() == R.id.buttonStar) { 
       isButtonClicked = !isButtonClicked; // toggle the boolean flag 
       v.setBackgroundResource(isButtonClicked ? R.drawable.btn_star_on : R.drawable.btn_star_off); 
      } 
     } 
    }); 
} 
+0

sì, funziona! grazie per l'idea –

6

È possibile creare un xml nella cartella dei disegni. Questo xml (si sceglie il nome ... chiamiamolo "bg_button_star.xml") potrebbe apparire solo come questo:

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

Poi è necessario assegnare questo file disegnabile alla proprietà pulsante sfondo nel file di layout.

android:background="@drawable/bg_button_star" 

Se si vuole fare questo a livello di codice, allora non resta che fare:

button.setBackgroundResource(R.drawable.bg_button_star); 

Quando l'utente clicca per la prima volta sul pulsante, è possibile impostare lo stato selezionato al 'vero'. Lo sfondo cambia di conseguenza. (viceversa per il 'falso' Stato selezionato).

+0

Grazie nico, ma ho voluto provare a farlo attraverso Java. –

1

Si può fare nel vostro onClick() qualcosa come:

if(star.getTag()==R.drawable.btn_star_on){ 
    star.setTag(R.drawable.btn_star_off); 
    star.setBackgroundResource(R.drawable.btn_star_off); 
} else { 
    star.setTag(R.drawable.btn_star_on); 
    star.setBackgroundResource(R.drawable.btn_star_on); 
} 

Ovviamente è meglio il tag prima che l'istruzione se e altro basato sulle tue informazioni Non conosco il resto del codice e come controlli se questo pulsante deve essere iniziatilizzato con la risorsa estraibile btn_star_off o btn_star_on

1

Puoi provare questo.

public void Favorites(View V) { 
Button star = (Button) findViewById(R.id.buttonStar); 

if(star.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState())) 
    { 
      star.setBackground(R.drawable.btn_star_on); 
    } else {    
      star.setBackground(R.drawable.btn_star_off); 
    } 
} 

Ma assicurati di chiamare questo metodo onClick() del pulsante di avvio.

Altrimenti è necessario fare qualcosa di simile.

Button star = (Button) findViewById(R.id.buttonStar); 
star.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

     if(v.getBackground().getConstantState().equals(getResources().getDrawable(R.drawable.btn_star_off).getConstantState())) 
     { 
      v.setBackground(R.drawable.btn_star_on); 
     } else {    
      v.setBackground(R.drawable.btn_star_off); 
     } 
     } 
    }); 
+0

Allego la funzione Preferiti() a onClick del mio pulsanteStar. Ho usato il tuo primo codice, non sembra fare nulla .. –

+0

@AndreBounames Ho modificato la mia risposta. Puoi controllare di nuovo. – Pooja

Problemi correlati