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

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

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

Ответы

Ответ 1

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

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

Вы можете связать это с выпадающим списком состояний, подобным этому, который сохраняется как файл 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 Вкл
  • Disabled Отключено
  • On Pressed Вкл. нажата
  • Off Pressed Выкл. Нажмите

Ответ 2

Вы можете просто использовать встроенный 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

Ответ 3

Я хотел, чтобы моя любимая кнопка вела себя как флажок, так что это сработало для меня, без необходимости добавлять какую-либо логику переключения изображений в мой 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"/>

Ответ 4

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

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

Ответ 6

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

Ответ 7

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

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

Ответ 8

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

В макете 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"));
    }

}

Ответ 9

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