Android选择器仅采用默认值

时间:2015-10-27 03:21:42

标签: android android-button android-imagebutton

我正在尝试在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模拟器。

3 个答案:

答案 0 :(得分:0)

ImageButtonImageView的子类,而不是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());
}