Кнопка звезда в 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:
-
выкл
-
On
-
отключен
-
On Нажата
-
Выкл Нажата
Вы можете просто использовать встроенный 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"/>
вот довольно хороший учебник для создания пользовательской кнопки, от начала до конца. Вы даже можете создать свой собственный звездный образ, если хотите получить действительно хитрый, для каждого из состояний кнопки.
просто добавьте ниже код в свою деятельность:
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
) . см. этой