在透明的ActionBar中部分显示ImageView

时间:2012-11-14 15:14:36

标签: android actionbarsherlock

Google地图应用程序具有透明的ActionBar,通过该ActionBar可以看到地图。

enter image description here

我可以使用以下方法设置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 个答案:

答案 0 :(得分: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>

答案 1 :(得分:26)

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

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

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

与任何requestWindowFeature...一样,应在添加内容之前调用此方法。

setContentView之后,您可以使用此Drawable设置背景:

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

使用getActionBar为ActionBarSherlock

更改getSupportActionBar 带有形状的根元素的

actionbar_bg.xml

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

虽然我发现 Tomik的解决方案非常棒,但这对于那些针对少数活动的一次性案例非常有用,而不是全面的风格。

答案 2 :(得分: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"
      />

...

答案 3 :(得分:1)

enter image description here

在styles.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" />