Кнопка "Звезда" на 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:
-
Выкл.
-
Вкл
-
Отключено
-
Вкл. нажата
-
Выкл. Нажмите
Ответ 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
Ответ 5
Как насчет StateListDrawable
для Button
? Попробуйте, приятель:)
http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
Ответ 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