Android 如何在运行时更改按钮形状样式?

Android 如何在运行时更改按钮形状样式?,android,material-design,android-button,material-components-android,material-components,Android,Material Design,Android Button,Material Components Android,Material Components,我正在用java开发一个应用程序,android studio,用户可以选择应用程序的样式和颜色 对于大多数组件,只需使用.setBackground(colorUser) 问题出在我的按钮上 我的纽扣都是圆形的,我为此创造了一个形状 我的形状在另一个文件中 <shape xmlns:android="http://schemas.android.com/apk/res/android" android:padding="10dp" android:shape="recta

我正在用java开发一个应用程序,android studio,用户可以选择应用程序的样式和颜色

对于大多数组件,只需使用
.setBackground(colorUser)

问题出在我的按钮上

我的纽扣都是圆形的,我为此创造了一个形状

我的形状在另一个文件中

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:padding="10dp"
    android:shape="rectangle">

    <solid android:color="@color/colorJetway" />

    <corners
        android:bottomLeftRadius="80dp"
        android:bottomRightRadius="80dp"
        android:topLeftRadius="80dp"
        android:topRightRadius="80dp" />

</shape>

<Button
            android:id="@+id/btnAdc"
            android:layout_width="84dp"
            android:layout_height="84dp"
            android:layout_marginTop="12dp"

            android:layout_marginEnd="205dp"
            android:background="@drawable/btns_border"
            android:onClick="btnAdicionar_click"
            android:text="+"
            android:textColor="#FFFFFF"
            android:textSize="40dp"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txtQuantidade" />

这样,如果在运行时我使
mybutton.setBackground(colorUser)
mybutton失去了它的风格。。。它将没有圆边


我该怎么做呢?

这不完全是你想要的。
但是,使用该组件,圆形按钮非常简单

只需使用
app:cornerRadius
定义角半径,并使用
app:backgroundTint
更改背景颜色

<com.google.android.material.button.MaterialButton
    app:backgroundTint="@color/myselector"
    app:cornerRadius="xxdp"
    .../>

如果您的颜色有限,您可以使用您想要的颜色创建一些可绘制的

例如:

blackButton.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">

<solid android:color="@color/black" />

<corners
    android:bottomLeftRadius="80dp"
    android:bottomRightRadius="80dp"
    android:topLeftRadius="80dp"
    android:topRightRadius="80dp" />
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">

<solid android:color="@color/white" />

<corners
    android:bottomLeftRadius="80dp"
    android:bottomRightRadius="80dp"
    android:topLeftRadius="80dp"
    android:topRightRadius="80dp" />

whiteButton.xml:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">

<solid android:color="@color/black" />

<corners
    android:bottomLeftRadius="80dp"
    android:bottomRightRadius="80dp"
    android:topLeftRadius="80dp"
    android:topRightRadius="80dp" />
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:padding="10dp"
android:shape="rectangle">

<solid android:color="@color/white" />

<corners
    android:bottomLeftRadius="80dp"
    android:bottomRightRadius="80dp"
    android:topLeftRadius="80dp"
    android:topRightRadius="80dp" />

当您想更改按钮的背景时,只需使用
button.setBackground(getResources().getDrawable(R.drawable.blackButton))
button.setBackground(getResources().getDrawable(R.drawable.whiteButton))