2015-06-23 333 views
7

我使用的是內置的主題我的Android應用:的Android按鈕的背景顏色改變按鈕的大小

<style name="AppTheme" parent="android:Theme.Black"> 
    <!-- Customize your theme here. --> 
</style> 

我很高興與這一主題,但我想改變一個按鈕的背景顏色。下面是它的外觀默認:

default

這裏的時候我添加背景顏色來此按鈕(android:background="@color/play_bg")會發生什麼:

enter image description here

咦!它基本上改變了所有按鈕的大小,填充和邊距!

所以我設法使用backgroundTint屬性(android:backgroundTint="@color/play_bg"),以獲得期望的結果:

enter image description here

不幸的是,這僅僅是因爲API,這是不是我接受的21版本的支持。

所以兩個問題:

  • 爲什麼與按鈕的屬性的其餘部分更改背景混亂?
  • 如何在沒有backgroundTint的情況下獲得預期結果?

還有一個額外問題:如何以編程方式獲得預期結果(我的應用程序中有動態按鈕,所以這會非常有用)?

回答

9

您可以在Java文件中更改此顏色。當您的主類加載時,您可以獲取此按鈕的對象,然後更改顏色。

這裏是你如何在清單文件中定義這個按鈕:

<Button 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="PLAY" 
android:id="@+id/btn1" 
... /> 

現在,在您的Java文件時要添加你需要

Button b = (Button)findViewByID(R.id.btn1); 
b.getBackground().setColorFilter(0xFFFF0000,PorterDuff.Mode.MULTIPLY); 

您也可以使用COLOR此XML佈局:下面的代碼有時不適用於我: - b.setBackgroundColor(int color)

+2

尼斯的更簡單的方法。有用!爲了完整起見,你能解釋一下'PorterDuff.mode.MULTIPLY'的作用嗎?另外,你知道爲什麼「android:background =」@ color/...「這個」直觀的「解決方案不起作用嗎? –

+0

我們主要在設計圖形應用時使用PorterDuff。 PorterDuff被描述爲一種組合圖像的方式,就好像它們是彼此重疊的「不規則形狀的紙板塊」一樣,以及混合重疊部分的方案。 下面是文章中,我發現,WIL更好地解釋你: http://ssp.impulsetrain.com/porterduff.html java.lang.Object繼承 ↳\t java.lang.Enum中的 \t↳\t android.graphics.PorterDuff.Mode 參考:http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html –

+0

關於你的問題,爲什麼你的母語的方法沒有奏效: 當您使用背景時,背景對文本所在的部分進行了更改。背景取決於您正在使用的文本大小。 對於整個背景更改,您可能需要setColorFiller(Color.RED) –

1

我的情況,我會在這個過程中

<Button 
    android:id="@+id/button1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_margin="3dp" 
    android:background="@color/play_as" 
    android:padding="8dp" 
    android:text="Button" /> 

做或者你可以使用這個link即創建按鈕