Google地图应用程序具有透明的ActionBar,通过该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?
答案 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)
在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" />