覆盖Action Bar不起作用

时间:2015-01-18 07:04:58

标签: android android-layout android-actionbar android-styles

我正在关注official developer's guide以覆盖操作栏。

我的style.xml如下:

<!-- Base application theme. -->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
</style>

<style name="AppTheme" parent="AppBaseTheme">
    <item name="actionBarStyle">@style/CustomActionBarTheme</item>

</style>

<style name="CustomActionBarTheme"
    parent="@android:style/Theme.Holo">
    <item name="android:windowActionBarOverlay">true</item>
</style>

我的midSdkVersion是14,预期输出类似于官方指南:enter image description here

相反,在我的情况下,输出是:enter image description here

(我已将背景颜色设置为活动......但它不会覆盖操作栏。)

如果我做的任何事情都错了,请帮助我。

编辑:

我想在airnb和许多其他应用程序中使用类似的操作栏。任何人都可以给我完整的答案吗?

enter image description here

6 个答案:

答案 0 :(得分:34)

我在你的代码中看到了一些误解:

  1. windowActionBarOverlay应在您的主题上指定,而不是ActionBar的样式。
  2. 没有理由使用支持主题的Holo。这只会破坏你的支持能力。
  3. 试试这个:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="android:windowActionBarOverlay">true</item>
        <!--For compatibility-->
        <item name="actionBarStyle">@style/MyActionBar</item>
        <item name="windowActionBarOverlay">true</item>
    </style>
    
    <color name="transparent_black">#80000000</color>
    <style name="MyActionBar" parent="Widget.AppCompat.ActionBar.Solid">
        <item name="android:background">@color/transparent_black</item>
        <!--For compatibility-->
        <item name="background">@color/transparent_black</item>
    </style>
    

答案 1 :(得分:4)

我想你错过了developer guide

的这一点

启用叠加模式

仅适用于Android 3.0及更高版本

style.xml

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

适用于Android 2.1及更高版本

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.AppCompat">
        <item name="android:windowActionBarOverlay">true</item>

        <!-- Support library compatibility -->
        <item name="windowActionBarOverlay">true</item>
    </style>
</resources>

指定布局上边距

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize">
    ...
</RelativeLayout>

我有两个示例链接请查看它们以获得更多说明。

Android Tutorial: Overlay with User Instructions

Pushing the ActionBar to the Next Level

答案 2 :(得分:1)

请改为尝试:

<style name="AppBaseTheme" parent="android:style/Theme.Holo.Light.DarkActionBar">
</style>

<style name="OverlayActionBarTheme" parent="AppBaseTheme">
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:actionBarStyle">@style/Holo.ActionBar.Overlay</item>
</style>

<style
    name="Holo.ActionBar.Overlay"
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">
    <item name="android:background">#80000000</item>
</style>

答案 3 :(得分:1)

在搜索了两个小时之后,我觉得有必要在这里添加这个答案。

我的诀窍是将以下所有6行添加到styles.xml

    <item name="android:windowActionModeOverlay">true</item>
    <item name="android:windowActionBarOverlay">true</item>
    <item name="android:windowActionBar">true</item>

    <item name="windowActionModeOverlay">true</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="windowActionBar">true</item>

据我所知,所有这些行都做同样的事情,但不同的API级别只听取某些行。我应该提一下,我使用最低API级别19。

答案 4 :(得分:0)

您错过了您需要在documention

中说明的应用主题中设置重叠
 <!-- the theme applied to the application or activity -->

如果问题没解决,请反馈;)

答案 5 :(得分:-1)

我完全自定义视图,因此,活动布局将填满所有屏幕,并将自定义LinearLayout置于顶部,所有按钮和图标都会膨胀