2011-11-23 9 views
14

Me gustaría poner un botón en forma de estrella en mi aplicación, como una estrella de clasificación. Ya he intentado usar una barra de calificación de una estrella, pero desafortunadamente no funciona como un botón.Botón Estrella en Android

Me gustaría que funcione como un botón, incluso mejor si el fondo del estado seleccionado es amarillo ... alguna sugerencia? Gracias.

Respuesta

27

Claro, utilizar un recurso de diseño de la siguiente manera:

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

puede emparejar esto con un dibujable lista de estado definido como esto que se guarda como un archivo XML en 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> 

Aquí son las imágenes que empacan con el propio Android:

  • Off Off
  • On En
  • Disabled discapacitados
  • On Pressed En Presionado
  • Off Pressed Off Presionado
+1

¿Cómo puedo obtener esas imágenes en una mejor resolución? – user1012480

+5

Obtuve el mío directamente de la carpeta \ platforms \ android-14 \ data \ res \ drawable-hdpi. Los archivos comienzan con el nombre "btn_star" – jkschneider

+0

obtengo, no puedo resolver el botón dibujable_focused .. ¿Cómo puedo solucionar esto? ¡Muchas gracias! –

1

Me temo que no hay tal control integrado para Android. Tendrá que usar un Button (o un ImageButton) y establecer el fondo (o el recurso de la imagen) en a drawable with states.

2

Este es un muy buen tutorial para crear un botón personalizado, de principio a fin. Incluso puedes crear tu propia imagen de estrella, si quieres ser realmente astuto, para cada uno de los estados de los botones.

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

0

Puede ser que usted necesita utilizar un selector que es útil para el estado de un Button (o un ImageButton). remítase a this

13

Puede simplemente usar la lista de estado incorporada btn_star dibujable.

<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

Consulte http://developer.android.com/reference/android/R.drawable.html para obtener una lista canónica de los objetos dibujables. –

+2

¿Cómo lo hago de amarillo? –

3

quería que mi botón favorito para comportarse como una casilla de verificación, por lo que esta funcionado bien para mí, sin tener que añadir ninguna lógica imagen alternar en mi OnClickListener. En mi código de Java puedo usar myFavoriteToggleButton.isChecked() para determinar la acción tomada.

<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

Sólo tiene que añadir a continuación el código en tu Actividad:

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 de que: a definir booleano isEnable = false global. esta es mi ImageButton código 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

Usted puede tratar de insertarlo como una vista de texto. Fue la forma más fácil que encontré para hacer esto.

en el XML de diseño que añade como una vista de texto

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

Luego, en el código escribió una función como la siguiente.

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

}