如何将 Material 主题应用到应用程序 (activity) 中的所有按钮?
How to apply Material Theme to all buttons in application (activity)?
我正在尝试自定义我的 Android 主题,但似乎没有任何效果。
Activity:
public class MainActivity extends AppCompatActivity {
...
}
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Delete" parent="Theme.MaterialComponents.Light">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/primary</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/primary</item>
<item name="colorSecondaryVariant">@color/primary</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.Button</item>
<item name="colorPrimary">@color/primary</item>
</style>
<style name="ThemeOverlay.Button" parent="" >
<!-- For filled buttons, your theme's colorPrimary provides the default background color of the component-->
<item name="colorPrimary">@color/primary</item>
</style>
</resources>
在布局中我使用 Material 设计组件 例如
<com.google.android.material.button.MaterialButton
android:id="@+id/button_home_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/home_all"
app:layout_constraintStart_toStartOf="parent"/>
但默认的 purple_200
背景色应用于按钮。你能帮我一下吗?我读到我应该使用 Activity
而不是 AppCompatActivity
但我无法更改它,因为我的 activity 是底部导航 activity 我找不到对 onSupportNavigateUp
或其他相关内容
编辑
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="licenta.allbank">
<application
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AllBank"
android:usesCleartextTraffic="true">
<activity
android:name=".activity.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="callback"
android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>
要使用 MaterialButton
,您必须在应用中使用 Theme.MaterialComponents.*
主题。
然后你可以定义materialButtonStyle
属性。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
....
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
通过这种方式,您可以自定义应用中所有按钮的主题。
要覆盖默认背景颜色,您可以使用 materialThemeOverlay
属性:
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.Button</item>
</style>
<style name="ThemeOverlay.Button" parent="" >
<!-- For filled buttons, your theme's colorPrimary provides the default background color of the component-->
<item name="colorPrimary">@color/my_color</item>
</style>
否则,您可以在自定义样式中使用 backgroundTint
属性:
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<!-- Background color -->
<item name="backgroundTint">@color/buttonBackgroundSelector</item>
</style>
想通了。如果您在物理设备上进行测试并且它设置为 暗模式 ,您应该在 values-night/themes.xml
文件中进行更改,否则,在 values/themes.xml
应该够了
我正在尝试自定义我的 Android 主题,但似乎没有任何效果。
Activity:
public class MainActivity extends AppCompatActivity {
...
}
themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Delete" parent="Theme.MaterialComponents.Light">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryVariant">@color/primary</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/primary</item>
<item name="colorSecondaryVariant">@color/primary</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.Button</item>
<item name="colorPrimary">@color/primary</item>
</style>
<style name="ThemeOverlay.Button" parent="" >
<!-- For filled buttons, your theme's colorPrimary provides the default background color of the component-->
<item name="colorPrimary">@color/primary</item>
</style>
</resources>
在布局中我使用 Material 设计组件 例如
<com.google.android.material.button.MaterialButton
android:id="@+id/button_home_all"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/home_all"
app:layout_constraintStart_toStartOf="parent"/>
但默认的 purple_200
背景色应用于按钮。你能帮我一下吗?我读到我应该使用 Activity
而不是 AppCompatActivity
但我无法更改它,因为我的 activity 是底部导航 activity 我找不到对 onSupportNavigateUp
或其他相关内容
编辑
AndroidManifest.xml<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="licenta.allbank">
<application
android:requestLegacyExternalStorage="true"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.AllBank"
android:usesCleartextTraffic="true">
<activity
android:name=".activity.MainActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:label="@string/app_name"
android:launchMode="singleInstance"
android:windowSoftInputMode="adjustPan">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="callback"
android:scheme="https" />
</intent-filter>
</activity>
</application>
</manifest>
要使用 MaterialButton
,您必须在应用中使用 Theme.MaterialComponents.*
主题。
然后你可以定义materialButtonStyle
属性。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.MaterialComponents.Light">
....
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
通过这种方式,您可以自定义应用中所有按钮的主题。
要覆盖默认背景颜色,您可以使用 materialThemeOverlay
属性:
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.Button</item>
</style>
<style name="ThemeOverlay.Button" parent="" >
<!-- For filled buttons, your theme's colorPrimary provides the default background color of the component-->
<item name="colorPrimary">@color/my_color</item>
</style>
否则,您可以在自定义样式中使用 backgroundTint
属性:
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<!-- Background color -->
<item name="backgroundTint">@color/buttonBackgroundSelector</item>
</style>
想通了。如果您在物理设备上进行测试并且它设置为 暗模式 ,您应该在 values-night/themes.xml
文件中进行更改,否则,在 values/themes.xml
应该够了