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

erd*_*ter 1 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);
        }
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

btn.setBackgroundColor(Color.RED);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

Sas*_*_KP 5

而不是使用

btn.setBackgroundColor(Color.RED);
Run Code Online (Sandbox Code Playgroud)

使用

btn.getBackground().setColorFilter(new LightingColorFilter(0xFFFFFFFF, 0xFFAA0000));
Run Code Online (Sandbox Code Playgroud)

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

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

例如,红色阴影按钮

btn.getBackground().setColorFilter(0xFFFF0000, PorterDuff.Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)

对于绿色阴影按钮

btn.getBackground().setColorFilter(0xFF00FF00, PorterDuff.Mode.MULTIPLY);
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.