我正在尝试在Android中的星形按钮上实现切换功能 这是res / my
中的图像按钮<ImageButton
android:id="@+id/star_icon"
android:layout_width="100dp"
android:layout_height="100dp"
android:src="@drawable/star"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:clickable="true"
android:onClick="onToggleStar"
android:background="#00ffffff"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:padding="20dp"/>
这是drawable / star.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:drawable/btn_star"/> <!-- pressed -->
<item android:drawable="@android:drawable/btn_star_big_off"/>
</selector>
这是我的onclick处理程序
public void onToggleStar(View view)
{
view.setSelected(!view.isSelected());
}
我正在犯的问题是按钮src总是采用默认值,即btn_star_big_off
此前已经提出过这个问题 stackoverflow.com/questions/2604599/android-imagebutton-with-a-selected-state 以及其他一些地方,但我无法找出任何问题。 请帮忙。
编辑
我也试过这个
<Button
android:id="@+id/star_icon"
android:layout_width="100dp"
android:layout_height="100dp"
android:background="@drawable/star"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:clickable="true"
android:onClick="onToggleStar"
android:adjustViewBounds="true"
android:scaleType="fitCenter"
android:padding="20dp"/>
与其他两个功能相同。 我正在使用genymotion模拟器。
答案 0 :(得分:0)
ImageButton
是ImageView
的子类,而不是Button
,默认情况下它不可点击,并且它不支持选择器drawable,因此您的选择器赢了&#39 ; t ImageButton
。
因此,为了实现您的目标,您可以以编程方式设置imagebutton的src或将ImageButton
更改为Button
,并将@drawable/star
设置为其背景值。
答案 1 :(得分:0)
问题是
@android:drawable/btn_star
本身就是一个包含许多项目的内置按钮选择器,
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="false" android:state_window_focused="false"
android:drawable="@drawable/btn_star_big_off" />
<item android:state_checked="true" android:state_window_focused="false"
android:drawable="@drawable/btn_star_big_on" />
<item android:state_checked="true" android:state_window_focused="false"
android:state_enabled="false" android:drawable="@drawable/btn_star_big_on_disable" />
<item android:state_checked="false" android:state_window_focused="false"
android:state_enabled="false" android:drawable="@drawable/btn_star_big_off_disable" />
<item android:state_checked="true" android:state_pressed="true"
android:drawable="@drawable/btn_star_big_on_pressed" />
<item android:state_checked="false" android:state_pressed="true"
android:drawable="@drawable/btn_star_big_off_pressed" />
<item android:state_checked="true" android:state_focused="true"
android:drawable="@drawable/btn_star_big_on_selected" />
<item android:state_checked="false" android:state_focused="true"
android:drawable="@drawable/btn_star_big_off_selected" />
<item android:state_checked="true" android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/btn_star_big_on_disable_focused" />
<item android:state_checked="true" android:state_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_star_big_on_disable" />
<item android:state_checked="false" android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/btn_star_big_off_disable_focused" />
<item android:state_checked="false" android:state_focused="false" android:state_enabled="false"
android:drawable="@drawable/btn_star_big_off_disable" />
<item android:state_checked="false" android:drawable="@drawable/btn_star_big_off" />
<item android:state_checked="true" android:drawable="@drawable/btn_star_big_on" />
</selector>
为了让您的代码正常运行,请更改
android:src="@drawable/star"
到
android:src="@android:drawable/btn_star"
答案 2 :(得分:0)
@ user3892213首先尝试添加一个选项=&#34; false&#34;选中后=&#34; true&#34;
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:drawable/btn_star"/>
<item android:state_selected="false" android:drawable="@android:drawable/btn_star_big_off"/>
<item android:drawable="@android:drawable/btn_star_big_off"/>
</selector>
然后在java代码上首先将star的选择设置为false
<starObject>.setSelected(false);
然后尝试将日志放入点击监听器并检查星形状态
public void onToggleStar(View view)
{
Log.d("STAR", view.isSelected()+"");
view.setSelected(!view.isSelected());
}