将相同的背景颜色设置为按钮和图像按钮?

时间:2013-04-16 08:00:41

标签: android android-layout background

我有一个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);

1 个答案:

答案 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());

这将确保它们具有相同的背景。