Android 按钮背景颜色不变
Android Button background color not changing
在此 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 的预览中,它看起来和我想要的一模一样,但是当我 运行 我设备上的应用程序时,背景颜色是灰色 ("default button color")。如果我更改 styles.xml 中的文本颜色,例如:
<item name="android:textColor">@color/ColorPrimary</item>
它改变了(也在我的设备上)所以自定义样式正在加载,我尝试了不同的按钮颜色(适用于文本)但它不会改变。
为什么我的背景颜色没有加载?
你的风格应该是这样的....
<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" />
我认为您需要将属性从 "theme" 更改为 "style"。这些文件用于不同的用途,因此使用方式不同。
Style 用于为单个视图或组件分配属性,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 - 而不是将它们全部保存在同一个文件中)。这是惯例,不会影响代码的编译或执行,但作为代码风格推荐。
尝试使用 AppCompactButton
而不是
<Button
使用
<androidx.appcompat.widget.AppCompatButton
那就行了
更新:2021 年 1 月 6 日
发现以上内容不适用于早期的 Android 版本。
对于材料设计按钮使用
app:backgroundTint="@color/green"
如果您使用的是 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-->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
替换为
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
将 MaterialComponents 更改为 AppCompat 对我有用..
您可能正在使用 targetSdkVersion 30
material 主题
解决办法是改变theme.xml
风格
来自
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
到
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
您只需要在 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"
使用此属性backgroundTint
它会对您有所帮助。它对我有用。示例:
android:backgroundTint="@color/md_orange_800"
请使用androidx.appcompat.widget.AppCompatButton代替按钮。
<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>
我正在使用 targetSdk 30 和 compileSdk 32,并且我正在使用 Button 小部件。 Android Studio 版本 2021.1.1
就我而言,以下更改有效,
在 AndroidManifest.xml 中,在“应用程序”标签下将“android:theme”从
更改为
android:theme="@style/Theme.AppCompat.Light.NoActionBar"
至
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"
我移至 Theme.AppCompat.Light.NoActionBar 以删除标题栏。起初我试图将 themes.xml 中的“样式”更改为“Theme.AppCompat.Light.NoActionBar”,但它对我不起作用。
在此 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 的预览中,它看起来和我想要的一模一样,但是当我 运行 我设备上的应用程序时,背景颜色是灰色 ("default button color")。如果我更改 styles.xml 中的文本颜色,例如:
<item name="android:textColor">@color/ColorPrimary</item>
它改变了(也在我的设备上)所以自定义样式正在加载,我尝试了不同的按钮颜色(适用于文本)但它不会改变。
为什么我的背景颜色没有加载?
你的风格应该是这样的....
<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" />
我认为您需要将属性从 "theme" 更改为 "style"。这些文件用于不同的用途,因此使用方式不同。
Style 用于为单个视图或组件分配属性,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 - 而不是将它们全部保存在同一个文件中)。这是惯例,不会影响代码的编译或执行,但作为代码风格推荐。
尝试使用 AppCompactButton 而不是
<Button
使用
<androidx.appcompat.widget.AppCompatButton
那就行了
更新:2021 年 1 月 6 日
发现以上内容不适用于早期的 Android 版本。 对于材料设计按钮使用
app:backgroundTint="@color/green"
如果您使用的是 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-->
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
替换为
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
将 MaterialComponents 更改为 AppCompat 对我有用..
您可能正在使用 targetSdkVersion 30
material 主题
解决办法是改变theme.xml
风格
来自
<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
到
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
您只需要在 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"
使用此属性backgroundTint
它会对您有所帮助。它对我有用。示例:
android:backgroundTint="@color/md_orange_800"
请使用androidx.appcompat.widget.AppCompatButton代替按钮。
<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>
我正在使用 targetSdk 30 和 compileSdk 32,并且我正在使用 Button 小部件。 Android Studio 版本 2021.1.1
就我而言,以下更改有效,
在 AndroidManifest.xml 中,在“应用程序”标签下将“android:theme”从
更改为android:theme="@style/Theme.AppCompat.Light.NoActionBar"
至
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"
我移至 Theme.AppCompat.Light.NoActionBar 以删除标题栏。起初我试图将 themes.xml 中的“样式”更改为“Theme.AppCompat.Light.NoActionBar”,但它对我不起作用。