为什么更改默认按钮的颜色会使其在Android中看起来像矩形?

为什么更改默认按钮的颜色会使其在Android中看起来像矩形?,android,Android,为什么更改默认按钮的颜色会使其看起来像矩形?我不想为此使用自定义背景图像。 我想在一些情况下通过编程实现这一点,在这些情况下,我可以更改屏幕上许多小按钮的颜色。 有人能给出一个解决方案吗 请注意,阅读此文章似乎没有解决办法 或者是否有?您可以使用以下XML脚本,而不是将颜色作为背景。首先,让我告诉你,默认情况下,按钮视图是一个矩形,所以当你在布局中添加一个按钮视图时,它有一个默认的背景样式,因此你可以看到它的圆角。当您指定背景时,默认的stype/主题将被覆盖,您将获得原始形式的按钮,因此这里

为什么更改默认按钮的颜色会使其看起来像矩形?我不想为此使用自定义背景图像。 我想在一些情况下通过编程实现这一点,在这些情况下,我可以更改屏幕上许多小按钮的颜色。 有人能给出一个解决方案吗

请注意,阅读此文章似乎没有解决办法


或者是否有?

您可以使用以下XML脚本,而不是将颜色作为背景。首先,让我告诉你,默认情况下,按钮视图是一个矩形,所以当你在布局中添加一个按钮视图时,它有一个默认的背景样式,因此你可以看到它的圆角。当您指定背景时,默认的stype/主题将被覆盖,您将获得原始形式的按钮,因此这里您必须根据您的要求应用主题/stype。 如果只需要几个按钮,那么可以使用以下XML Scrut。您只需在android项目的参考资料下的drawable中创建一个.xml文件。然后将该.XML文件指定为按钮视图的背景。看看会发生什么

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#ffffff"/>
    <corners android:radius="6dp"/>
    <padding android:left="3dp" android:top="2dp"
            android:right="3dp" android:bottom="2dp" />
</shape>

用于更改颜色:

Drawable d = findViewById(R.id.button_name).getBackground();
               PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
               d.setColorFilter(filter);
Drawable d = findViewById(R.id.button_name).getBackground();
               findViewById(R.id.button_name).invalidateDrawable(d);
               d.clearColorFilter();
要删除颜色,请执行以下操作:

Drawable d = findViewById(R.id.button_name).getBackground();
               PorterDuffColorFilter filter = new PorterDuffColorFilter(Color.RED, PorterDuff.Mode.SRC_ATOP);
               d.setColorFilter(filter);
Drawable d = findViewById(R.id.button_name).getBackground();
               findViewById(R.id.button_name).invalidateDrawable(d);
               d.clearColorFilter();

使用上面的xml作为按钮背景会产生一些形状,但通过编程再次将其颜色更改为红色会导致其形状变为矩形。请参阅