覆盖操作栏不起作用
Overlaying the Action Bar not working
我正在关注 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,预期输出与官方指南中的类似:.
相反,在我的例子中,输出是:
(我已经将背景颜色设置为 activity...但它没有覆盖操作栏。)
如果我做错了什么,请帮助我。
编辑:
我想要在 airnb 和许多其他应用程序中使用类似的操作栏。谁能给我完整的答案?
试试这个:
<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>
我发现您的代码中存在一些误解:
windowActionBarOverlay
应该在您的主题上指定,而不是在您的 ActionBar
的风格上指定。
- 没有理由使用支持主题的
Holo
。这只会破坏您的支持能力。
试试这个:
<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>
我想你错过了 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>
我有两个示例链接请查看它们以获得更多说明。
我完全自定义视图,因此,activity 布局会填满整个屏幕,并将自定义 LinearLayout 放在顶部,所有按钮和图标都会膨胀
您只是错过了您需要按照 documention
中所述在您的应用程序主题中设置覆盖
<!-- the theme applied to the application or activity -->
如果问题没有解决请反馈;)
搜索了两个小时后,我觉得有必要在这里添加这个答案。
我的诀窍是将以下所有 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.
我正在关注 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,预期输出与官方指南中的类似:
相反,在我的例子中,输出是:
(我已经将背景颜色设置为 activity...但它没有覆盖操作栏。)
如果我做错了什么,请帮助我。
编辑:
我想要在 airnb 和许多其他应用程序中使用类似的操作栏。谁能给我完整的答案?
试试这个:
<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>
我发现您的代码中存在一些误解:
windowActionBarOverlay
应该在您的主题上指定,而不是在您的ActionBar
的风格上指定。- 没有理由使用支持主题的
Holo
。这只会破坏您的支持能力。
试试这个:
<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>
我想你错过了 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>
我有两个示例链接请查看它们以获得更多说明。
我完全自定义视图,因此,activity 布局会填满整个屏幕,并将自定义 LinearLayout 放在顶部,所有按钮和图标都会膨胀
您只是错过了您需要按照 documention
中所述在您的应用程序主题中设置覆盖 <!-- the theme applied to the application or activity -->
如果问题没有解决请反馈;)
搜索了两个小时后,我觉得有必要在这里添加这个答案。
我的诀窍是将以下所有 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.