在state_selected中单击时,ImageButton选择器不会触发state_pressed

时间:2011-09-21 10:19:28

标签: android

我还没找到解决方案。

我有一个静音/取消静音按钮。我把它设置为ImageButton,src和background都是选择器drawables。

我正在展示 - 选择按钮时的“静音”图标 - 未选择按钮时的“静音”图标

单击按钮时,我想在几分之一秒内显示黄色背景 但我经历的是: 仅当未选择按钮时出现黄色背景(通过单击)(isSelected = false),并且在选择按钮时不显示(isSelected = false)

我不明白为什么,但那就是发生了什么!

按下按钮时会出现黄色背景(无论是否选中),但我真正感兴趣的是当你只是点击它而不需要按住它时显示它/ p>

任何解决方案?

view.java

volumemuteImageButton = (ImageButton) findViewById(R.id.volume_mute);

volumemuteImageButton.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        volumemuteImageButton.setSelected(!volumemuteImageButton.isSelected());
    }
});

layout.xml

<ImageButton
   android:id="@+id/volume_mute"
   android:layout_width="58dp"
   android:layout_height="fill_parent"
   android:src="@drawable/img_selector"
   android:background="@drawable/bg_selector" />

img_selector.png

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/sdmp_ic_muted_pressed"
            android:state_selected="true" android:state_pressed="true" />
   <item android:drawable="@drawable/sdmp_ic_muted_pressed"
            android:state_selected="true" android:state_focused="true" />
   <item android:drawable="@drawable/sdmp_ic_muted_default"
            android:state_selected="true" />
   <item android:drawable="@drawable/sdmp_ic_mute_pressed"
            android:state_selected="false" android:state_pressed="true" />
   <item android:drawable="@drawable/sdmp_ic_mute_pressed"
            android:state_selected="false" android:state_focused="true" />
   <item android:drawable="@drawable/sdmp_ic_mute_default"
            android:state_selected="false" />
 </selector>

bg_selector.png

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:drawable="@drawable/sdmp_color_yellow"
            android:state_pressed="true" />
   <item android:drawable="@drawable/sdmp_color_yellow"
            android:state_focused="true" />
</selector>

1 个答案:

答案 0 :(得分:7)

我解决了它!!!!!

我不知道为什么,但使用onTouch ACTION_DOWN会这样做,而使用onClick state_pressed仅在selected=false传递时被触发1}}到selected=true

以前是怎么回事:

        volumemuteImageButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setVolumeMute(!volumemuteImageButton.isSelected());
            }
        });

现在怎么样:

        volumemuteImageButton.setOnTouchListener(new View.OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getAction()==MotionEvent.ACTION_DOWN) {
                    setVolumeMute(!volumemuteImageButton.isSelected());
                }
                return false;
            }
        });