我有一个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 :(得分:1)
@ChristianGraf删除滤色镜并检查ImageButton和Button的原始背景:它们的亮度应该不同。这意味着背景原本是不同的。
我们如何解决这个问题?我们不可以;简单地说,因为系统使用的drawables作为ImageButton和Button的背景亮度不同。如果您在更多设备上尝试代码,您可能会注意到更多/更少/更少的差异。
一种解决方案是将PorterDuff.Mode
中的setColorFilter
设置为SRC或DST。这实际上会改变预期的结果。
解决方案 (使用其中一个背景)
在您的代码中,您首先使用以下行修复itemAddButton
(按钮)的背景:
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());
这将确保它们具有相同的背景。