【问题标题】:android:background attribute not being applied to buttonsandroid:background 属性未应用于按钮
【发布时间】:2021-11-13 13:39:47
【问题描述】:

这是我在 StackOverflow 上的第一个问题,我希望得到社区的大力帮助 :) 我已经四处寻找这个问题的解决方案几个小时,但我有点困惑..

我正在尝试为我的 android 应用程序创建一个自定义的轮廓圆形按钮,但是当我通过 XML 文件中的 android:background 属性应用它时,它并不能正常工作。默认背景颜色(紫色)不会被移除。也没有应用中风。但是,边角是圆角的。

有人说 android:background 不适用于 MaterialButtons。有人说在 theme.xml 文件中创建一个样式并通过 android:backgroundTint 属性重新应用它(它也不起作用)。 有人说尝试以编程方式更改它(也不起作用!)。

请提供有效的解决方案。

这是我的代码以及我用它实现的目标。

activity_main

<Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:background="@drawable/round_button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

round_button

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

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

    <stroke
        android:width="3dp"
        android:color="@color/teal_200" />

    <corners android:radius="25dp" />

</shape> 

这是我得到的结果

这就是我想要实现的。

我真的很期待您的回答!谢谢。

【问题讨论】:

    标签: android android-button android-background


    【解决方案1】:

    我之前遇到过这个问题,我所做的只是将文件主题中的主题更改为 Appcompat 而不是 Material Theme

    【讨论】:

    • 是的,我也找到了这个解决方案。但是有影响吗?我认为如果 MaterialComponents 默认添加到我们的应用程序中,那么它可能具有比 AppCompat 更多更好的功能。这就是阻止我尝试该解决方案的原因..
    • 您只能针对特定的活动而不是整个应用程序更改它
    • 但如果我将其更改为旧的 AppCompat 而不是 MaterialComponenets,这会影响某些特定活动。
    • 看起来很糟糕,您可以使用 MaterialComponenets 及其更好的功能,也可以使用 btnImag 接受更改背景,但这不是一个完美的解决方案。这就是我所拥有的。希望对你有一点帮助
    【解决方案2】:

    你好@Shafique Ahmed,

    首先欢迎来到 Stack Overflow,现在要回答您的问题,请尝试如下更改您的可绘制文件并让我知道它是否有效:

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    
    <item><shape>
            <stroke android:width="1dp" android:color="#000000" />
    
            <solid android:color="@android:color/transparent" />
    
            <corners 
                android:bottomLeftRadius="4dp" 
                android:bottomRightRadius="4dp" 
                android:topLeftRadius="4dp" 
                android:topRightRadius="4dp" />
        </shape></item>
    
    </selector>
    

    编辑:您还可以通过以下步骤将您的活动主题之一从 Material Components 更改为 App Compact:

    1. styles.xml(有时也称为themes.xml)中,在您的主主题下方创建另一个主题(新主题:App Compact,同时保持主主题为材料组件)并为其命名 2.进入你要更改主题的布局的activity文件,添加然后调用setTheme(R.style.NameOfTheme);函数。

    注意:在设置内容视图之前调用set theme()函数(由setContentView执行)

    编辑 2: 尝试参考 this question回答你的问题:

    【讨论】:

    【解决方案3】:

    使用app:backgroundTint 更改按钮颜色

    【讨论】:

    • 这对 OP 不起作用,因为他要求 带边框的透明按钮,而不是 简单的填充按钮
    • 试过了。没有达到我想要的!
    • 您可以尝试使用 TextView 创建自定义按钮。自定义背景形状更容易。
    • 此答案被标记为低质量,请提供更多支持信息和解释以更好地回答或删除它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-04
    • 2022-08-23
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多