2012-03-20 57 views
1

有沒有什麼辦法可以在Android中改變按鈕的背景漸變而不改變其餘部分?Android - 任何方式來設置按鈕背景的樣式,但保持原樣?

我想製作一個按鈕,就像一個普通的按鈕,但具有不同的漸變。我在桌面佈局中製作了一個3x3的按鈕網格。第一個按鈕就像這裏的XML,其他按鈕沒有背景屬性。

<Button android:id="@+id/DemoButton" 
    android:layout_width="105sp" 
    android:layout_height="105sp" 
    android:background="@drawable/button1" 
    android:onClick="theButtonHandler" 
    android:text="Fee"> 
    </Button> 

我的風格是這樣的。 。 。

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" > 
    <shape> 
     <gradient 
     android:startColor="#5555AA" 
     android:endColor="#000033" 
     android:angle="270" /> 
    </shape> 
</item> 
<item> 
    <shape> 
     <gradient 
     android:startColor="#BBBBDD" 
     android:endColor="#BB9988" 
     android:angle="270"/> 
     <corners android:bottomRightRadius="3dp" android:bottomLeftRadius="3dp" 
      android:topLeftRadius="3dp" android:topRightRadius="3dp"/> 
    </shape> 
    </item> 
</selector> 

我不得不把角落半徑放進去,因爲新按鈕有90度銳角。結果如下所示: enter image description here

。 。 。它比其他按鈕更大,我必須在圓角代碼,即使我改變的唯一屬性是「android:background」。我怎樣才能改變背景?提前致謝!!

回答

2

如果您看看Android用於按鈕的可繪圖,您會發現在圖像的邊界附近總是有大量像素保持透明。我假設你使用的圖像沒有任何透明邊框。爲了使它看起來與Android可繪製相等,你應該添加這些邊界。您可以瀏覽您的android-sdk/platforms/<some-platform>/data/res/<some-drawable-folder>文件夾,查看圖像的設計方式。希望這可以幫助。

+0

謝謝你 - 這是非常有益的。 (+1) – user316117 2012-03-21 13:08:43

+0

@ user316117,不客氣! – Egor 2012-03-21 13:10:40

0

您可以輕鬆地將它更改爲

<selector 
xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_pressed="true" > 
    <shape> 
     <gradient 
     android:startColor="#5555AA" 
     android:endColor="#000033" 
     android:angle="270" /> 
     <corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
    </shape> 
</item> 
<item> 
    <shape> 
     <gradient 
     android:startColor="#BBBBDD" 
     android:endColor="#BB9988" 
     android:angle="270"/> 
     <corners 
    android:bottomRightRadius="10dp" 
    android:bottomLeftRadius="10dp" 
    android:topLeftRadius="10dp" 
    android:topRightRadius="10dp"/> 
    </shape> 
    </item> 
</selector>