36

Google Maps 应用程序有一个透明的ActionBar,通过它可以看到地图。

在此处输入图像描述

我可以使用以下方法设置 ActionBar 的透明度:

<style name="Theme.MyTheme" parent="android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">#64000000</item>
</style>

但是如何在 ActionBar 后面显示我的 ImageView?

4

4 回答 4

43

您可以启用ActionBar. 为此,您必须将(android:)windowActionBarOverlay主题中的项目设置为true.

<style name="MyTheme" parent="Theme.Sherlock">
    ...
    <item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
    <item name="android:windowActionBarOverlay">true</item>
</style>
于 2012-11-14T15:25:09.940 回答
26

您也可以在运行时设置它:

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

这将使ActionBar 成为一个半透明的浮动条。

像 any 一样requestWindowFeature...,这应该在添加内容之前调用。

之后setContentView,您可以Drawable使用以下命令设置背景:

getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg));

更改getActionBargetSupportActionBarActionBarSherlock

actionbar_bg.xmlshape的根元素:

<solid android:color="#64000000" />

尽管我发现Tomik 的解决方案很棒,但这对于一些活动的一次性案例而不是全面的风格很有用。

于 2012-11-14T15:38:39.570 回答
10

如果有人需要透明栏,但仅用于某些活动,而在其余活动中使用实心栏,则可能值得创建两种不同的样式并使用清单来控制它:

<style name="MyThemeOverlay" parent="Theme.Sherlock">
    ...
    <item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
    <item name="android:windowActionBarOverlay">true</item>
    <!-- any stuff common here, colours, etc -->

    <!-- define the style for native ActionBar for Android 4 and higher -->
    <item name="android:actionBarStyle">@style/myActionbarTransparent</item>
    <!-- define the style for ActionBarSherlock -->
    <item name="actionBarStyle">@style/myActionbarTransparent</item>
</style>

<style name="MyThemeNoOverlay" parent="MyTheme">
    <item name="windowActionBarOverlay">false</item> <!-- for ActionBarSherlock -->
    <item name="android:windowActionBarOverlay">false</item>
    <!-- any stuff specific for no overlay activity action bars -->

    <!-- define the style for native ActionBar for Android 4 and higher -->
    <item name="android:actionBarStyle">@style/myActionbar</item>
    <!-- define the style for ActionBarSherlock -->
    <item name="actionBarStyle">@style/myActionbar</item>
</style>

<style name="myActionbar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@color/white</item>
</style>
<style name="myActionbarTransparent" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@color/transparent</item>
</style>

然后在您的中,AndroidManifest.xml您可以通过执行以下操作将其中一个用作默认值,将另一个用于某些特定活动:

<application
    ...
    android:theme="@style/MyThemeOverlay">
    ...
    <activity
      android:name=".Activity1"       
      />
    <activity
      android:name=".Activity2"    
      android:theme="@style/MyThemeNoOverlay"   
      />
    <activity
      android:name=".Activity3"       
      />
    <activity
      android:name=".Activity4"       
      android:theme="@style/MyThemeNoOverlay"
      />

...

于 2013-07-24T15:36:13.653 回答
1

在此处输入图像描述

在样式.xml 中:

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="colorPrimary">@color/semiTransparent5</item>
</style>

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" >
    <item name="windowActionBarOverlay">true</item>
</style>

在activity_main.xml 中:

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:layout_scrollFlags="scroll|enterAlways"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</com.google.android.material.appbar.AppBarLayout>

<include layout="@layout/content_main" />

于 2020-01-14T22:47:08.160 回答