2013-02-04 56 views
2

我想創建一個具有默認圖像的按鈕,但當它按下它切換到一個新的圖像。我使用this tutorial以及this question,但它不起作用。ImageButton狀態時按下不顯示

這是我info_button_selector.xml:

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

這是我的ImageButton代碼:

   <ImageButton 
        android:id="@+id/apModeInfoButton" 
        android:layout_width="0dip" 
        android:background="@null" 
        android:layout_height="match_parent" 
        android:layout_weight="1.15" 
        android:clickable="true" 
        android:src="@drawable/info_button_selector" /> 

按鈕停留在尋找像ic_menu_info_details的整個時間的初始狀態。

我改變了我的info_button_selector.xml文件到這一點:

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

ic_menu_info_details2圖像顯示的整個時間,預計。這表明按鈕IS使用XML文件作爲其可繪製資源,但爲什麼按鈕在按下時不會更改其圖像?

編輯

使用下面喬斯的回答,圖像依然不改,現在在一個陌生的方式延伸。注意:除了第二個圖像縮放爲60%大小外,兩幅圖像都完全相同。這可能意味着它正在工作,但由於視圖被拉伸,我無法說明。

   <ImageButton 
        android:id="@+id/apModeInfoButton" 
        android:layout_width="0dip" 
        android:layout_height="match_parent" 
        android:layout_weight="1.15" 
        android:clickable="true" 
        android:background="@drawable/info_button_selector" /> 

我使用了這兩個版本的XML文件以及圖像的不同組合,所有的組合導致相同大小的圖像永遠不會改變。

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

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

回答

4

設置是繪製到ImageButton的背景而非SRC

<ImageButton 
      android:id="@+id/apModeInfoButton" 
      android:layout_width="0dip" 
      android:background="@drawable/info_button_selector" 
      android:layout_height="match_parent" 
      android:layout_weight="1.15" 
      android:clickable="true" /> 

編輯跟進失真問題:

那麼你可以做的是有分層。

由於背景是可拉伸的,因此將其設置爲BACKGROUND,並將不應伸展的圖像分開,並將其設置爲SRC。

<ImageButton 
     android:id="@+id/apModeInfoButton" 
     android:layout_width="0dip" 
     android:src="@drawable/non_scaleable_image" 
     android:background="@drawable/gradient_bg" 
     android:layout_height="match_parent" 
     android:layout_weight="1.15" 
     android:clickable="true" /> 

通過這種方式,你可以有一個背景漸變並將它延伸沒有鬆動的質量和SRC圖像不會調整大小和扭曲。

這實際上是一個ImageButton應該用於。

或者,按照我在第一個答案中所建議的內容進行操作,但使用按鈕代替。讓我知道這是否有幫助。

+0

謝謝,我給了它一個鏡頭,但它並沒有解決問題。如果你有時間,我更新了我的問題。 – JuiCe

+0

編輯我的回答添加更多描述 –

1

您應該嘗試使用完整的不同圖像來查看細節2,並查看圖像是否實際上正在改變,但未被重新調整大小。我不希望有狀態的按鈕重新調整大小,也許使用兩個不同的圖像並設置可見性。

+0

是的,我剛剛這樣做,它工作正常,圖像現在只是很奇怪地伸展。 – JuiCe

相關問題