2013-10-17 50 views
2

我試圖設置ImageView的選擇,但它不工作的ImageButton選擇不工作

我的佈局

<LinearLayout 
     android:id="@+id/actionLayout" 
     android:orientation="horizontal" 
     android:background="@color/orange_color" 
     android:gravity="center_vertical" 
     android:paddingTop="@dimen/actions_top_bottom" 
     android:paddingBottom="@dimen/actions_top_bottom" 

     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <ImageButton 
      android:layout_width="wrap_content" 
      android:layout_height="@dimen/actions_height" 
      android:id="@+id/btnNoRecord" 
      android:scaleType="centerInside" 
      android:src="@drawable/ic_action_record" 
      android:onClick="onRecordSwitcherClick" 
      android:layout_weight="1" 
      android:background="@drawable/selector"/> 
... 
</LinearLayout> 

我selector.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/dark_orange_color"/> 
     </shape> 
    </item> 
    <item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/orange_color"/> 
     </shape> 
    </item> 
</selector> 

在哪裏是錯誤?也許在LinearLayout屬性裏面有bug?

編輯 我剛在LinearLayout之外發現ImageButton工作正常。但我真的需要佈局

+0

名稱是選擇器還是Myselector.xml? –

+0

編號名稱是selector.xml –

+0

您的選擇器正在使用我的設備。您遇到什麼問題? – Manishika

回答

0

我已經解決了!

在我的代碼,我

btnNoRecord.setOnTouchListener(new View.OnTouchListener() { 
    @Override 
    public boolean onTouch(View view, MotionEvent motionEvent) 
    { 
     ... 
     return true; 
    } 
}); 

我改變還真回報虛假,它是工作!

+0

這不是一個好的解決方案....它可能工作,但我不會使用這種方法。 – Booger

0

放填充你的ImageView看到背景選擇

<ImageButton 
     android:layout_width="wrap_content" 
     android:layout_height="@dimen/actions_height" 
     android:paddingn="5dp" 
     android:id="@+id/btnNoRecord" 
     android:scaleType="centerInside" 
     android:src="@drawable/ic_action_record" 
     android:onClick="onRecordSwitcherClick" 
     android:layout_weight="1" 
     android:background="@drawable/selector"/> 

         OR 

試試這個樣子,這將工作,你必須給填充,使背景選擇可見

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true"> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/dark_orange_color"/> 
      <padding 
      android:bottom="5dp" 
      android:left="5dp" 
      android:right="5dp" 
      android:top="5dp" /> 
     </shape> 
</item> 
<item> 
     <shape android:shape="rectangle"> 
      <solid android:color="@color/orange_color"/> 
      <padding 
      android:bottom="5dp" 
      android:left="5dp" 
      android:right="5dp" 
      android:top="5dp" /> 
     </shape> 
</item> 

+0

對不起。我試過你的代碼,它不工作。 –

1

您的選擇器看起來不正確。

我想你可能會錯過狀態(即state_focused =「true」等)。重要的是要記住,選擇器按從上到下的順序進行分析(所以如果首先遇到狀態,選擇器中的其他項將被忽略 - 即順序很重要)。

<selector 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:drawable="@drawable/btn_settings_inset_top_pressed" 
     android:state_focused="true" 
     android:state_pressed="true"/> 
    <item 
     android:drawable="@drawable/btn_settings_inset_top_pressed" 
     android:state_focused="false" 
     android:state_pressed="true"/> 
    <item 
     android:drawable="@drawable/btn_settings_inset_top" 
     android:state_focused="true" 
     android:state_pressed="false"/> 
    <item 
     android:drawable="@drawable/btn_settings_inset_top" 
     android:state_focused="false" 
     android:state_pressed="false"/> 
</selector> 
+0

我不需要專注的狀態。另外 ...不能工作太 –

+0

這是我使用的選擇器,當然是功能性的。如果你不需要所有的特定狀態,你可以省略那些你不需要的狀態。 – Booger

+1

謝謝。我已經嘗試過,但它不起作用。你是否嘗試過你的選擇器ImageButton屬性android:background? –

2

clickableImageButton如下屬性:

<ImageButton 
    android:layout_width="wrap_content" 
    android:layout_height="@dimen/actions_height" 
    android:id="@+id/btnNoRecord" 
    android:src="@drawable/ic_action_record" 
    android:background="@drawable/selector" 
    android:clickable="true"/> 

ImageButtonImageView延長。 clickable屬性默認爲false,因此您必須手動設置它。

+0

你能解釋一下這個方法和原理嗎? – SuperBiasedMan

+0

ImageButton是從ImageView擴展而來的,默認情況下clickable屬性爲false。 – staky