Android按钮背景颜色不变

时间:2015-08-06 14:25:51

标签: android

在这个android项目中我创建了一个默认的按钮样式。 我的styles.xml

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:buttonStyle">@style/ButtonStlye123</item>
</style>

<style name="ButtonStlye123" parent="android:style/Widget.Button">
    <item name="android:textSize">19dp</item>
    <item name="android:layout_margin">8dp</item>
    <item name="android:padding">8dp</item>
    <item name="android:textColor">@color/ColorDivider</item>

    <item name="android:background">@color/ColorAccent</item>
</style>

片段中的我的按钮。

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btnLogin"
    android:id="@+id/btn_login"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:theme="@style/ButtonStlye123"
    android:onClick="login" />

在android studio的预览中,它看起来与我想要的完全一样,但是当我在设备上运行应用程序时,背景颜色为灰色(“默认按钮颜色”)。如果我在styles.xml中更改文本颜色,如:

<item name="android:textColor">@color/ColorPrimary</item>

它改变了(也在我的设备上)所以自定义样式正在加载,我为按钮尝试了不同的颜色(适用于文本),但它不会改变。

为什么我的背景颜色不加载?

9 个答案:

答案 0 :(得分:19)

尝试使用AppCompactButton 代替

<Button

使用

<androidx.appcompat.widget.AppCompatButton

可以解决问题的

答案 1 :(得分:10)

<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">

替换为

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

将 MaterialComponents 更改为 AppCompat 对我有用..

答案 2 :(得分:5)

您只需要在styles.xml 文件中将您的应用主题从Theme.MaterialComponents.DayNight.DarkActionBar 更改为Theme.AppCompat.Light.NoActionBar

示例:

来自:style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar"

至:style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"

答案 3 :(得分:4)

您可能正在使用 targetSdkVersion 30

解决方案:将theme.xml样式从

更改
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

答案 4 :(得分:3)

我认为您需要将属性从“主题”更改为“样式”。这些文件适用于不同的目的,因此使用方式不同。

样式用于为各个视图或组件指定属性,而Theme用于将属性应用于整个应用程序。

所以试试这个:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/btnLogin"
    android:id="@+id/btn_login"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    <!-- This attribute was changed -->        
    android:style="@style/ButtonStlye123"
    android:onClick="login" />

您还应该根据需要将这些不同类型的XML拆分为正确的文件(styles.xml和themes.xml - 而不是将它们全部保存在同一个文件中)。这是约定,不会影响代码编译或执行,但建议作为代码样式。

答案 5 :(得分:1)

你的风格应该是这样的......

<style name="ButtonStlye123" >
    <item name="android:textSize">19dp</item>
    <item name="android:layout_margin">8dp</item>
    <item name="android:padding">8dp</item>
    <item name="android:textColor">@color/ColorDivider</item>

    <item name="android:background">@color/ColorAccent</item>
</style>

并在布局中

<Button
     android:id="@+id/btn3"
     style="@style/ButtonStlye123"
     android:layout_width="@dimen/sixzero"
     android:layout_height="@dimen/sixzero"
     android:text="3" />

答案 6 :(得分:1)

使用这个属性会帮助你。它对我有用。 android:backgroundTint="@color/md_orange_800"

答案 7 :(得分:1)

请使用 androidx.appcompat.widget.AppCompatButton 代替 Button

  <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/button_id_Login"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/textInnputLayout_editText_id_password"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="50dp"
        android:text="@string/Login_screen_button_text"
        android:background="@drawable/login_button_style"
        android:textAllCaps="false">
    </androidx.appcompat.widget.AppCompatButton>

答案 8 :(得分:0)

如果您使用的是Android Studio 4.1及更高版本(测试版) 检查您的themes.xml文件中的值。

<style name="Theme.NavaFlashLightV4" parent="Theme.MaterialComponents.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="colorOnPrimary">@color/white</item>
</style>

将属性更改为@null

<style name="Theme.NavaFlashLightV4" parent="Theme.MaterialComponents.DayNight.NoActionBar">
            <!-- Primary brand color. -->
            <item name="colorPrimary">@null</item> <!-- HERE -->
            <item name="colorPrimaryVariant">@color/purple_700</item>
            <item name="colorOnPrimary">@color/white</item>
    </style>

用于其他旧版本的Android Studio

只需更改此属性

<item name="colorPrimary">@color/colorPrimary</item>

        <item name="colorPrimary">@color/@null</item>

最后将按钮的背景设置为所需的可绘制图标。 例如:

<Button
        android:id="@+id/btnSwitch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:background="@drawable/ic_launcher_background" /> <!--the drawable you want-->