Android 5.0(棒棒糖):材料样式未应用

时间:2016-02-08 23:27:20

标签: android xml material-design android-theme

我正在努力使我的应用符合Google的材料设计最佳做法,但出于某种原因,我在v21 \ styles.xml中设置的项目从未应用于我的应用程序。

请查看下面的v21样式和Android Manifest文件,并告诉我我做错了会导致我的自定义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+的样式不会被触发。

下面我还发布了我的App的其他平台版本的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>

值\ 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中列出的样式?

1 个答案:

答案 0 :(得分:1)

我发现了错误。

基本上,在您的清单文件中,您正在为应用程序设置“AppTheme”。但是,您还要为活动设置主题(FullscreenTheme)。

<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中进行不同的设置。

这是你的电话!