我想在我的应用中添加一个星形按钮,就像评级明星一样。我已经尝试使用一颗星评级栏,但不幸的是它不能用作按钮。
我希望它可以作为一个按钮工作,如果所选状态的背景是黄色的话会更好......有什么建议吗?感谢。
答案 0 :(得分:28)
当然,请使用这样的布局资源:
<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"/>
您可以将此配置与此类定义的可绘制状态列表配对,并在res/drawable/star.xml
保存为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本身打包的图片:
答案 1 :(得分:13)
您可以使用内置的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
答案 2 :(得分: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"/>
答案 3 :(得分:2)
这是一个非常好的教程,用于从头到尾创建自定义按钮。如果你想为每个按钮状态变得非常狡猾,你甚至可以创建自己的星形图像。
答案 4 :(得分:2)
只需在您的活动中添加以下代码:
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。 这是我的ImageButton 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" />
答案 5 :(得分:1)
StateListDrawable
的{{1}}怎么样?试试吧,哥们:)
http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
答案 6 :(得分:1)
我担心Android没有这样的内置控件。您需要使用Button
(或ImageButton
),并将背景(或图像资源)设置为a drawable with states。
答案 7 :(得分:1)
您可以尝试将其作为文本视图插入。这是我发现的最简单的方法。
在布局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"));
}
}
答案 8 :(得分:0)
您可能需要使用selector
,这对Button
(或ImageButton
)的状态很有帮助。参考this