2011-09-21 93 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; 
      } 
     }); 
相關問題