Android 5.0(棒棒糖):Material 未应用样式
Android 5.0(Lollipop): Material Style Not Being Applied
我正在努力使我的应用符合 Google 的 material 设计最佳实践,但由于某些原因,我在 v21\styles.[=60 中设置的项目=] 从未应用于我的应用程序。
请查看下面的 v21 样式和 Android 清单文件,并告诉我我做错了什么会导致我的自定义 AppTheme 不显示。
v21\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- android theme colors -->
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="colorPrimary">#F44336</item>
<!-- darker variant for the status bar and contextual app bars -->
<item name="colorPrimaryDark">#FFD600</item>
<!-- theme UI controls like checkboxes and text fields -->
<item name="colorAccent">#FFD600</item>
</style>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.foo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"> **Theme set here**
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- Test:USB otg -->
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<!-- Test:USB otg -->
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
我正在运行最新版本 Android、API 23 的设备上测试此代码,所以我不确定为什么 API 21 的样式+ 不会被触发。
下面我还发布了我的应用程序的其他平台版本的 xml 文件,应用程序似乎正在使用其中一个。为了完整起见,我已经包括了这些。
v14\styles.xml
<resources>
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
</resources>
v11\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 11 theme customizations can go here. -->
</style>
<style name="FullscreenTheme" parent="android:Theme.Holo">
<item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
<item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>
<style name="FullscreenActionBarStyle" parent="android:Widget.Holo.ActionBar">
<item name="android:background">@color/black_overlay</item>
</style>
</resources>
values\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="FullscreenTheme" parent="android:Theme.NoTitleBar">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">@style/ButtonBar</item>
<item name="metaButtonBarButtonStyle">@style/ButtonBarButton</item>
</style>
<style name="ButtonBar">
<item name="android:paddingLeft">2dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingRight">2dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:background">@android:drawable/bottom_bar</item>
</style>
<style name="ButtonBarButton" />
</resources>
为什么我的应用程序从不显示我在 v21\styles.xml 中布置的样式??
我发现了错误。
基本上,在您的清单文件中,您正在为应用程序设置 "AppTheme"。但是,您还为 activity(全屏主题)设置了主题。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
android:theme="@style/AppTheme"> **Theme set here**
<activity
android:theme="@style/FullscreenTheme" >
...
</activity>
</application>
</manifest>
要修复,我看到两个选项:
选项 1:
您可以删除:
android:theme="@style/FullscreenTheme"
选项2:
如果您确实需要使用该 FullscreenTheme,请将其添加到 v21/styles.xml。然后,您可以在 v21 中进行不同的设置。
一切由你决定!
我正在努力使我的应用符合 Google 的 material 设计最佳实践,但由于某些原因,我在 v21\styles.[=60 中设置的项目=] 从未应用于我的应用程序。
请查看下面的 v21 样式和 Android 清单文件,并告诉我我做错了什么会导致我的自定义 AppTheme 不显示。
v21\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- android theme colors -->
<!-- Main theme colors -->
<!-- your app branding color for the app bar -->
<item name="colorPrimary">#F44336</item>
<!-- darker variant for the status bar and contextual app bars -->
<item name="colorPrimaryDark">#FFD600</item>
<!-- theme UI controls like checkboxes and text fields -->
<item name="colorAccent">#FFD600</item>
</style>
</resources>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.foo"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="23" />
<application
android:allowBackup="true"
android:icon="@drawable/launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme"> **Theme set here**
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:label="@string/app_name"
android:theme="@style/FullscreenTheme" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<!-- Test:USB otg -->
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<!-- Test:USB otg -->
<meta-data
android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
android:resource="@xml/device_filter" />
</activity>
</application>
</manifest>
我正在运行最新版本 Android、API 23 的设备上测试此代码,所以我不确定为什么 API 21 的样式+ 不会被触发。
下面我还发布了我的应用程序的其他平台版本的 xml 文件,应用程序似乎正在使用其中一个。为了完整起见,我已经包括了这些。
v14\styles.xml
<resources>
<!--
Base application theme for API 14+. This theme completely replaces
AppBaseTheme from BOTH res/values/styles.xml and
res/values-v11/styles.xml on API 14+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 14 theme customizations can go here. -->
</style>
</resources>
v11\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Base application theme for API 11+. This theme completely replaces
AppBaseTheme from res/values/styles.xml on API 11+ devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- API 11 theme customizations can go here. -->
</style>
<style name="FullscreenTheme" parent="android:Theme.Holo">
<item name="android:actionBarStyle">@style/FullscreenActionBarStyle</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">?android:attr/buttonBarStyle</item>
<item name="metaButtonBarButtonStyle">?android:attr/buttonBarButtonStyle</item>
</style>
<style name="FullscreenActionBarStyle" parent="android:Widget.Holo.ActionBar">
<item name="android:background">@color/black_overlay</item>
</style>
</resources>
values\styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="FullscreenTheme" parent="android:Theme.NoTitleBar">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@null</item>
<item name="metaButtonBarStyle">@style/ButtonBar</item>
<item name="metaButtonBarButtonStyle">@style/ButtonBarButton</item>
</style>
<style name="ButtonBar">
<item name="android:paddingLeft">2dp</item>
<item name="android:paddingTop">5dp</item>
<item name="android:paddingRight">2dp</item>
<item name="android:paddingBottom">0dp</item>
<item name="android:background">@android:drawable/bottom_bar</item>
</style>
<style name="ButtonBarButton" />
</resources>
为什么我的应用程序从不显示我在 v21\styles.xml 中布置的样式??
我发现了错误。
基本上,在您的清单文件中,您正在为应用程序设置 "AppTheme"。但是,您还为 activity(全屏主题)设置了主题。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
android:theme="@style/AppTheme"> **Theme set here**
<activity
android:theme="@style/FullscreenTheme" >
...
</activity>
</application>
</manifest>
要修复,我看到两个选项:
选项 1:
您可以删除:
android:theme="@style/FullscreenTheme"
选项2:
如果您确实需要使用该 FullscreenTheme,请将其添加到 v21/styles.xml。然后,您可以在 v21 中进行不同的设置。
一切由你决定!