Кнопка звезда в Android

Я хотел бы поместить одну звездообразную кнопку в мое приложение, как и рейтинговая звезда. Я уже пытался использовать один звездный рейтинг, но, к сожалению, он не работает как кнопка.

Я хотел бы, чтобы он работал как кнопка, даже лучше, если фон выбранного состояния желтый...есть предложения? Спасибо.

9 ответов


конечно, используйте ресурс макета, как это:

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

вы можете связать это со списком состояний drawable, определенным как это, который сохраняется как XML-файл в 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>

вот изображения, которые упаковываются с самим Android:

  • Off выкл
  • On On
  • Disabled отключен
  • On Pressed On Нажата
  • Off Pressed Выкл Нажата

Вы можете просто использовать встроенный btn_star список состояний drawable.

<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

Я хотел, чтобы моя любимая кнопка вела себя как флажок, поэтому это хорошо работало для меня, без необходимости добавлять логику переключения изображений в мой onClickListener. В моем Java-коде я могу использовать myFavoriteToggleButton.isChecked() чтобы определить принятое действие.

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

вот довольно хороший учебник для создания пользовательской кнопки, от начала до конца. Вы даже можете создать свой собственный звездный образ, если хотите получить действительно хитрый, для каждого из состояний кнопки.

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


просто добавьте ниже код в свою деятельность:

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

обратите внимание, что: define boolean isEnable=false global. это мой xml-код ImageButton:

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

как о StateListDrawable на Button? Попробуй, приятель:)

http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html


Я боюсь, что нет такого встроенного управления для Android. Вам нужно будет использовать Button (или ImageButton), и установите фон (или ресурс изображения) в drawable с состояниями.


вы можете попробовать вставить его в виде текста. Это был самый простой способ сделать это.

в XML-макете я добавил его как текстовое представление

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

затем в коде написана функция, подобная следующей.

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

}

Возможно, вам нужно использовать selector Что полезно для состояния Button (или ImageButton) . см. этой