2013-04-16 55 views
1

我有一個Button對象和一個Imagebutton對象。我想要做的就是爲它們分配相同的背景顏色。將相同的背景顏色設置爲按鈕和圖像按鈕?

但圖像按鈕的背景顏色似乎總是比「普通」按鈕的顏色更亮?在S3 Mini上,模擬器上的亮度更亮,亮度更亮。 爲什麼?

private final int BUTTON_BACKGROUND_COLOR_CODE = Color.LTGRAY; 

... 

RelativeLayout TopLayout = (RelativeLayout) findViewById(R.id.topLayout); 
TopLayout.removeAllViews(); 
TopLayout.setPadding(m_TableRowLeftPadding_px, 8, m_TableRowRightPadding_px, 4); 

RelativeLayout.LayoutParams bParams = new RelativeLayout.LayoutParams(m_DefaultButtonWidth_px, 
    m_CurrentButtonHeight_px); 
bParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
bParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 

Button itemAddButton = new Button(this); 
itemAddButton.getBackground().setColorFilter(BUTTON_BACKGROUND_COLOR_CODE, 
    PorterDuff.Mode.SRC_IN); 

itemAddButton.setLayoutParams(bParams); 
itemAddButton.setText(m_Resources.getString(R.string.AddItemButtonString)); 
itemAddButton.setId(ADD_ITEM_BUTTON_ID); 
itemAddButton.setOnClickListener(new View.OnClickListener() 
{ 
    ... 
}); 

TopLayout.addView(itemAddButton); 

RelativeLayout.LayoutParams ibParams = new RelativeLayout.LayoutParams(MIN_IMG_BUTTON_WIDTH, 
    m_CurrentButtonHeight_px); 
ibParams.addRule(RelativeLayout.LEFT_OF, itemAddButton.getId()); 

ImageButton speechButton = new ImageButton(this); 

speechButton.setLayoutParams(ibParams); 
// speechButton.setImageDrawable(m_Resources.getDrawable(R.drawable.micro2)); 

speechButton.setContentDescription(m_Resources.getString(R.string.AddSpeechItemString)); 
speechButton.getBackground().setColorFilter(BUTTON_BACKGROUND_COLOR_CODE, 
    PorterDuff.Mode.SRC_IN); 

speechButton.setOnClickListener(new View.OnClickListener() 
{ 
    ... 
}); 


TopLayout.addView(speechButton); 
+0

爲什麼不使用兩個'Buttons'或兩個'ImageButtons'而不是一個'Button'和'ImageButton' ?? – Renjith

+0

「爲什麼我的S3 Mini在模擬器上亮了一點,路明亮了?」這取決於設備的屏幕規格。您會在另一款智能手機上看到另一種顏色的亮度。 – JJ86

+0

@RKN:ImageButton不允許設置文本,字體等。而「普通」按鈕不允許添加圖像,這是我的意圖。我只是評論一下,以避免我的圖像的「透明」背景造成的視覺干擾。 –

回答

1

@ChristianGraf移除濾鏡並檢查ImageButton和Button的原始背景:它們應該有不同的亮度。這意味着背景本來是不同的。


我們該如何解決這個問題?我們不可以;簡單地說,因爲系統用作ImageButton和Button的背景的可繪製亮度不同。如果您在更多設備上嘗試代碼,則可能會注意到更多/其他/更少的差異。


一種解決方案可以是在setColorFilterPorterDuff.Mode設置爲SRC或DST。這實際上會改變預期的結果。


解決方案(的背景使用一個兩次

在代碼中,你第一次使用這條線修復的itemAddButton(按鈕)backgrouond:

itemAddButton.getBackground().setColorFilter(BUTTON_BACKGROUND_COLOR_CODE, 
PorterDuff.Mode.SRC_IN); 

稍後,您使用相同的代碼來設置修復speechButton(ImageButton)的背景:

speechButton.getBackground().setColorFilter(BUTTON_BACKGROUND_COLOR_CODE, 
PorterDuff.Mode.SRC_IN); 

現在,所有你需要做的是,而不是設置背景的彩色濾光片,讓我們用你的第一個視圖的背景(按鈕):

speechButton.setBackgroundDrawable(itemAddButton.getBackground()); 

這將確保他們具有相同的背景。