2013-03-31 74 views
3

我想更改圖像按鈕的背景。基本上,我在透明背景上看到的圖像很棒,當有一大堆圖像背景不透明時,圖像就有點不舒服。僅更改ImageButton背景的一個狀態(默認狀態)

這應該是容易 - 只需上的按鈕改變到android:background透明色(通過被拉伸): click_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 

    <item android:state_focused="true"><color android:color="#FF008080" /> 
    </item> 
    <item android:state_pressed="true"><color android:color="#FF008080" /> 
    </item> 
    <item><color android:color="#00000000" /> 
    </item> 

</selector> 

然後按鈕

<ImageButton 
       android:id="@+id/players" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_gravity="center" 
       android:background="@drawable/click_background" 
       android:contentDescription="@string/players" 
       android:src="@drawable/speaker_tile" /> 

問題是我實際上想要保留state_focussedstate_pressed版本的背景(我認爲它是從主題派生的)。當按下按鈕或按下按鈕時(通常顯示的顏色與繪圖完全相同),通常在按下按鈕時主題將使用的按鈕將會很有幫助。

我想知道如果有一種方法可以做到以下幾點之一,但迄今無法找到任何東西:

  1. 定義一個選擇,在某些東西從另一個繼承(類似到主題可以從另一個主題繼承的方式)。

  2. 創建一個全新的選擇器,但它的XML引用是用於圖像按鈕的主題的state_focussedstate_pressed的顏色/可繪製。 編輯:它看起來像這個選項了。我會需要屬性,但不能從drawable中引用它們。 See here

我想如果可能的話要做到這一點在聲明XML,而不是編程的Java。

回答

3

您可以將Android OS使用的可繪製對象複製到您的項目中,並將它們用於狀態列表drawable。您可以在{android-sdk-directory}/platforms/android-##/data/res/drawable[-*dpi]

編輯找到圖片: 如果你去{android-sdk-directory}/platforms/android-##/data/res/values,你會發現由Android使用的themes.xmlstyles.xml文件。使用它們你可以找出你要找的哪些drawable。

例如,較新版本的Android的默認主題是Theme.Holo。這個主題有宣佈像這樣ImageButtons默認樣式:

<item name="imageButtonStyle">@android:style/Widget.Holo.ImageButton</item>

styles.xml,這種風格被定義如下:

<style name="Widget.Holo.ImageButton" parent="Widget.ImageButton"> 
    <item name="android:background">@android:drawable/btn_default_holo_dark</item> 
</style> 

值得慶幸的background屬性是正確的,在衆目睽睽下定義。有時它是從父類型繼承而來的,你必須找到它。在任何情況下,這裏的繪製(這是因爲它的XML的/drawable目錄中找到):

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_window_focused="false" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_window_focused="false" android:state_enabled="false" 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
<item android:state_pressed="true" 
    android:drawable="@drawable/btn_default_pressed_holo_dark" /> 
<item android:state_focused="true" android:state_enabled="true" 
    android:drawable="@drawable/btn_default_focused_holo_dark" /> 
<item android:state_enabled="true" 
    android:drawable="@drawable/btn_default_normal_holo_dark" /> 
<item android:state_focused="true" 
    android:drawable="@drawable/btn_default_disabled_focused_holo_dark" /> 
<item 
    android:drawable="@drawable/btn_default_disabled_holo_dark" /> 
</selector> 

因此,這些都是Android使用了標準的ImageButton的默認(全息暗)主題背景的繪製資源。

+0

謝謝,任何提示,我將尋找繪圖目錄中的哪些項目?有很多需要搜索。 –

+0

我認爲ImageButton使用與普通Button相同的背景。這也取決於什麼平臺級別。在較新版本的Android上,我認爲btn_default_ {state} _holo_dark.9.png和btn_default_ {state} _holo_light.9.png是您正在尋找的那些,但我並不積極。通常,我必須查看平臺資源中的res/values/styles.xml和res/values/styles.xml以確定我正在尋找的內容 – Karakuri

+0

此外,爲什麼我的答案被低估? – Karakuri