2011-11-23 4 views
14

Mi piacerebbe inserire un pulsante a forma di stella nella mia app, proprio come una stella di valutazione. Ho già provato a utilizzare una barra di valutazione a una stella, ma sfortunatamente non funziona come un pulsante.Pulsante stella in Android

Mi piacerebbe che funzionasse come un pulsante, meglio ancora se lo sfondo dello stato selezionato è giallo ... qualche suggerimento? Grazie.

risposta

27

Certo, utilizzare una risorsa di layout come questo:

<ImageButton android:id="@+id/favorite" 
     android:layout_width="wrap_content" 
     android:layout_height="fill_parent" 
     android:src="@drawable/star" 
     android:background="#00ffffff" 
     android:onClick="onToggleStar"/> 

si può abbinare questo con un disegnabile lista stato definito in questo modo che viene salvato come file XML in res/drawable/star.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="@drawable/button_pressed" /> <!-- pressed --> 
    <item android:state_focused="true" 
      android:drawable="@drawable/button_focused" /> <!-- focused --> 
    <item android:state_hovered="true" 
      android:drawable="@drawable/button_focused" /> <!-- hovered --> 
    <item android:drawable="@drawable/button_normal" /> <!-- default --> 
</selector> 

Qui sono le immagini che fanno i bagagli con Android stesso:

  • Off Off
  • On Su
  • Disabled disabili
  • On Pressed Su pressato
  • Off Pressed Off Premuto
+1

Come posso ottenere quelle immagini in una risoluzione migliore? – user1012480

+5

Ho estratto il mio direttamente dalla cartella \ piattaforme \ android-14 \ data \ res \ drawable-hdpi. I file iniziano con il nome "btn_star" – jkschneider

+0

Ottengo, non posso risolvere drawable button_focused .. Come posso risolvere questo problema? Grazie mille! –

1

ho paura che non esiste una built-in di controllo per Android. È necessario utilizzare uno Button (o uno ImageButton) e impostare lo sfondo (o la risorsa immagine) su a drawable with states.

2

Qui è un buon tutorial per la creazione di un pulsante personalizzato, dall'inizio alla fine. Puoi persino creare la tua immagine stellare, se vuoi diventare davvero furbo, per ciascuno degli stati del pulsante.

http://www.youtube.com/watch?v=zXXCFmfJMNw

0

Può essere è necessario utilizzare un selector che è utile per lo stato di un Button (o un ImageButton). fare riferimento a this

13

È possibile utilizzare solo lo statelist incorporato btn_star.

<ImageButton 
    android:id="@+id/favorite_button" 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:src="@android:drawable/btn_star" //This one! 
    android:layout_alignParentBottom="true" 
    android:layout_centerHorizontal="true" 
    android:background="#00ffffff" /> //Needed to remove the button background 
+0

Vedere http://developer.android.com/reference/android/R.drawable.html per l'elenco canonico di drawable. –

+2

Come posso renderlo giallo? –

3

volevo che il mio tasto preferito a comportarsi come una casella di controllo, quindi questo ha funzionato bene per me, senza dover aggiungere alcuna logica delle immagini commutando nel mio onClickListener. Nel mio codice Java posso usare myFavoriteToggleButton.isChecked() per determinare l'azione intrapresa.

<CheckBox 
    android:button="@android:drawable/btn_star" 
    android:padding="@dimen/activity_horizontal_margin" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/favorite" 

    android:background="@android:color/transparent" 
    android:layout_gravity="center"/> 
1

Basta aggiungere sotto codice nel tuo attività:

final ImageButton ButtonStar = (ImageButton) findViewById(R.id.star); 
    ButtonStar.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (isEnable){ 
       ButtonStar.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),android.R.drawable.btn_star_big_off)); 
      }else{ 
       ButtonStar.setImageDrawable(ContextCompat.getDrawable(getApplicationContext(),android.R.drawable.btn_star_big_on)); 
      } 
      isEnable = !isEnable; 
     } 
    }); 

nota che: definire booleano isEnable = false globale. questo è il mio ImageButton codice XML:

<ImageButton 
       android:id="@+id/star" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@null" 
       android:src="@android:drawable/btn_star" /> 
1

Si può provare a inserirlo come una visione del testo. E 'stato il modo più semplice che ho trovato per fare questo.

nel XML di layout ho aggiunto come una visione del testo

<TextView 
    android:id="@+id/tv_star_fav" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="#00ffffff" 
    android:onClick="onToggleStar" 
    android:text="★" 
    android:textSize="40sp" /> 

Poi nel codice scritto una funzione simile alla seguente.

boolean isfavourite; 


public void onToggleStar(View view){ 
    TextView favouriteStar = (TextView) view; 
    if(!isfavourite){ 
     // if the star is not already selected and you select it 
     isfavourite = true; 
     favouriteStar.setTextColor(Color.parseColor("#FFD600")); 
    }else{ 
     // if the star is already selected and you unselect it 
     isfavourite = false; 
     favouriteStar.setTextColor(Color.parseColor("#9E9E9E")); 
    } 

}