以编程方式设置按钮背景颜色会删除边距和圆角

时间:2015-09-26 07:40:33

标签: android button background-color

这是我创建一个偶数大小的5x5网格按钮的方法:

buttons_in_row = 5;
        LinearLayout layout = (LinearLayout) findViewById(R.id.linear_layout_tags);
        layout.setOrientation(LinearLayout.VERTICAL);

        for (int i = 0; i < buttons_in_row; i++) {
            LinearLayout row = new LinearLayout(this);
            row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));

            for (int j = 0; j < buttons_in_row; j++) {
                Button btn = new Button(this);
                LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT, 1.0f);
                btn.setLayoutParams(params);
                btn.setText("B " + (j + 1 + (i * buttons_in_row)));
                btn.setId(j + 1 + (i * buttons_in_row));
                btn.setWidth(width / buttons_in_row);
                btn.setHeight(width / buttons_in_row);
                btn.setOnClickListener(this);

                row.addView(btn);
            }

            layout.addView(row);
        }

enter image description here

当我将背景颜色设置为默认值以外的其他颜色时,会发生以下情况:

btn.setBackgroundColor(Color.RED);

enter image description here

1 个答案:

答案 0 :(得分:5)

而不是使用

btn.setBackgroundColor(Color.RED);

使用

btn.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));

您可以根据所需的颜色使用不同的值。如果您想知道颜色的常量值,可以参考the documents

此外,您可以使用PorterDuff乘法模式以编程方式设置整个按钮的阴影。这将改变按钮颜色而不仅仅是色调。

例如,红色阴影按钮

btn.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);

绿色阴影按钮

btn.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);

希望这有帮助。