java—如何使用布局作为背景设置按钮的背景色

ut6juiuv  于 2021-07-12  发布在  Java
关注(0)|答案(3)|浏览(377)

布局\u bg.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <!--<stroke android:width="3dp" android:color="#B1BCBE" />-->
    <corners android:radius="10dp"/>
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
</shape>

主活动.xml

<ImageButton
            android:background="@drawable/layout_bg"
            android:src="@drawable/myicon"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:tint="@android:color/black"
            android:minWidth="80.0dp"
            android:minHeight="80.0dp"
            android:padding="10px"
            android:scaleType="fitCenter"
            android:layout_alignParentBottom="true"
            android:id="@+id/btnFoo"
            android:layout_marginLeft="91.0dp" 
           />

我正在设置我的背景 ImageButton 以使我可以拥有动态圆角,如您在该图像中看到的:

但是,我需要改变的背景颜色只是那个按钮到另一个固体颜色,如红色。
如果我用 btnFoo.SetBackgroundColor(Color.Red) ,则圆角消失。
我假设是因为它将background属性改写为纯色值,而不是 layout_bg.xml 文件。
我如何设置这个特定场景的背景色 ImageButton 而不是我的主要活动中所有使用 layout_bg 作为背景?

t0ybt7op

t0ybt7op1#

你需要用红色做另一个可画的,然后使用它:

btnFoo.setBackgroundResource(R.drawable.red_drawable);
wgx48brx

wgx48brx2#

“使用材质”按钮所有功能都已内置

<com.google.android.material.button.MaterialButton
              android:layout_width="size"
              android:layout_height="size"
              android:backgroundTint="@color/colorPrimary"
              android:text="Add Images"
              android:textAllCaps="false"
              android:textColor="@color/white"
              app:cornerRadius="20dp"
              android:layout_marginRight="10dp"
              android:layout_marginLeft="20dp"/>
1mrurvl1

1mrurvl13#

您可以使用以下方法:

btnFoo.background.colorFilter =
        BlendModeColorFilterCompat.createBlendModeColorFilterCompat(
            color, BlendModeCompat.SRC_ATOP)


注:需要 androidx.core:core:1.2.0 作为替代,您可以使用 MaterialButton :

<com.google.android.material.button.MaterialButton
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        app:icon="@drawable/ic_add_24px"
        app:iconGravity="textStart"
        app:iconPadding="0dp"
        app:iconSize="48dp"
        android:backgroundTint="@color/..."
        android:textColor="#FFFFFF"
        app:cornerRadius="10dp"/>

在这种情况下,只需使用:

button1.backgroundTintList = ContextCompat.getColorStateList(this, R.color....)

相关问题