web-dev-qa-db-ja.com

透明なActionBarの後ろに部分的にImageViewを表示する

Google Mapsアプリケーションには透明な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>

しかし、どうすればActionViewの背後にImageViewを表示できますか?

35
nhaarman

ActionBarのオーバーレイモードを有効にできます。それを行うには、(Android:)windowActionBarOverlayテーマのアイテムをtrueに。

<style name="MyTheme" parent="Theme.Sherlock">
    ...
    <item name="windowActionBarOverlay">true</item> <!-- for ActionBarSherlock -->
    <item name="Android:windowActionBarOverlay">true</item>
</style>
43
Tomik

実行時に設定することもできます。

requestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

これにより、ActionBarが半透明のフローティングバーになります。

他のようにrequestWindowFeature...、これはコンテンツを追加する前に呼び出す必要があります。

setContentViewの後、Drawableから背景を次のように設定できます。

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

ActionBarSherlockのgetActionBargetSupportActionBarに変更します

actionbar_bg.xmlshapeのルート要素:

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

私はTomik'sの解決策は素晴らしいと思いますが、これは全体的なスタイルではなく、いくつかのアクティビティの1回限りのケースに役立ちます。

26
Siddharth Lele

誰かが透明なバーを必要とするが、残りの部分でソリッドなバーを使用しているときに特定のアクティビティのみが必要な場合は、2つの異なるスタイルを作成し、マニフェストを使用してそれを制御することをお勧めします。

<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これらの1つをデフォルトとして使用し、他の1つを特定のアクティビティに使用するには、次のようにします。

<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"
      />

...

10
Mariano Latorre

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" />
1
Dan Alboteanu