2011-09-21 77 views
2

我还找不到解决方案。ImageButton选择器在state_selected中点击时不会触发state_pressed

我有一个静音/取消静音按钮。我将它设置为ImageButton,其中src和background都是可选择的drawable。当未选择按钮

“静音”图标当点击了按钮我想显示黄色背景 - 当选择了按钮 了“静音”图标 -

我显示 几分之一秒 但我遇到的是: 只有在未选中按钮(isSelected = false)时才显示黄色背景(通过单击),并且在选择按钮时不显示(isSelected = false )

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

当按钮被按下时(无论是否被选中),黄色背景确实出现,但我真正感兴趣的是当你只需点击它而不需要保持按下

任何解决方案?

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> 
+0

的ImageButton的并没有真正公顷有一个开/关选择器,所以你将不得不用编程方式使用onClick〜(改变drawable)。你需要两个选择器xmls一个用于打开,一个用于关闭。在他们每个中你需要2个项目(一个用于按下,一个用于未按下) –

+0

我实际上已经在onClick中以编程方式更改了已选状态。我无法解释的是,为什么state_pressed通过点击按钮被解雇,但没有选择时,它没有被选中 –

+0

我注意到你的选择器有错误?! android:state_selected =“false”android:state_pressed =“true”'出现两次,android:state_selected =“true”android:state_focused =“true”'也出现两次 –

回答

7

我解决了!!!!!

我不知道为什么,但使用onTouchACTION_DOWN将做到这一点,在使用onClickstate_pressedselected=false传递到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; 
      } 
     }); 
相关问题