web-dev-qa-db-ja.com

ツールバーを透明にする方法

自己Q&A投稿ですレイアウトにオーバーレイする透明なActionBarを持っています。最新のサポートライブラリに移行した後、ツールバーを優先してActionBarを削除することを余儀なくされました。それを透明にし、そのレイアウトをオーバーレイする古い方法はもう機能しません。

<style name="CustomActionBarTheme" parent="@Android:style/Theme.AppCompat">
    <item name="Android:windowActionBarOverlay">true</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="Android:actionBarStyle">@style/TransparentActionBar</item>
</style>

<style name="TransparentActionBar" parent="@Android:style/Widget.Holo.Light.ActionBar">
    <item name="Android:background">@Android:color/transparent</item>
</style>
58
Gleichmut

必要なのは、アクションバーを非表示にするテーマを定義し、背景が透明なアクションバーのスタイルを定義し、このスタイルをツールバーウィジェットに設定することです。ツールバーは最後のビュー(すべてのビューツリー上)として描画されることに注意してください

<style name="Theme.Custom" parent="@Android:style/Theme.AppCompat">
    <item name="windowActionBar">false</item>
    <item name="windowActionBarOverlay">true</item>
    <item name="Android:windowActionBarOverlay">true</item>
</style>

<style name="CustomActionBar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="windowActionBarOverlay">true</item>
</style>

レイアウト:

<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:orientation="vertical"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <!-- Toolbar should be above content-->
    <include layout="@layout/toolbar" />

</RelativeLayout>

ツールバーのレイアウト:

<Android.support.v7.widget.Toolbar
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    app:theme="@style/CustomActionBar"/>
36
Gleichmut

AppBarLayoutの背景が@ nullであるtoolbar.xmlファイルを作成します

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.AppBarLayout
    Android:id="@+id/general_appbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@null"
    xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <Android.support.v7.widget.Toolbar
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize">
        <TextView
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:gravity="center_horizontal"
            Android:text="Login"
            Android:textSize="20sp"/>
    </Android.support.v7.widget.Toolbar>

</Android.support.design.widget.AppBarLayout>

結果は次のとおりです。

enter image description here

37
TranVo

Googleのサンプルソースコードを確認して、ツールバーを完全に透明にする方法を見つけました。思ったより簡単でした。このような単純なShape Drawableを作成するだけです。

ドロアブルの名前はtoolbar_bgです

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" >
<gradient
    Android:angle="90"
    Android:startColor="@Android:color/transparent"
    Android:endColor="@Android:color/transparent"
    Android:type="linear" />
</shape>

そして、フラグメントまたはアクティビティに..このようなツールバーを追加します。

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        Android:layout_alignParentStart="true"
        Android:layout_alignParentTop="true"
        Android:background="@drawable/toolbar_bg"
        Android:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

そして、ここには完全に透明なツールバーがあります。

enter image description here

<Android.support.design.widget.AppBarLayout >を追加しないでください。これは機能しません。

注:AppBarLayoutが必要な場合は、影を描画しないように標高を0に設定します。

30
Pedro Varela

ツールバーはビューのように機能するため、答えは非常に簡単です。

toolbar.getBackground().setAlpha(0);
21
Marco Vignoli

Style.xmlに次の行を追加します

<style name="Base.Theme.AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme" parent="Base.Theme.AppTheme">
</style>

次に、style-v21に次の行を追加します。

  <style name="AppTheme" parent="Base.Theme.AppTheme">
    <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="Android:statusBarColor">@Android:color/transparent</item>
</style>

android:theme = "@ style/AppTheme"としてテーマを設定します

ステータスバーが透明になります。

11
Reprator

次のxmlコードを使用するだけです。

レイアウトのコード:

<Android.support.v7.widget.Toolbar
            xmlns:Android="http://schemas.Android.com/apk/res/Android"
            Android:id="@+id/def_toolbar"
            Android:layout_height="wrap_content"
            Android:layout_width="match_parent"
            Android:minHeight="?attr/actionBarSize"
            Android:background="@color/toolbarTransparent"
            Android:layout_alignParentTop="true" />

そして、次のコードをcolors.xmlに追加します。

<color name="toolbarTransparent">#00FFFFFF</color>

これにより、目的の出力が得られます。

7
V_J

アプリバーのレイアウトに以下のようにAndroid:background="@Android:color/transparent"を追加するだけです

<Android.support.design.widget.AppBarLayout
       Android:layout_width="match_parent"
       Android:layout_height="wrap_content"
       Android:background="@Android:color/transparent">

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="?attr/actionBarSize"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</Android.support.design.widget.AppBarLayout>`
6
Rajesh.k

2つのTheme.AppCompat.Light.NoActionBarテーマを作成し、colorPrimary属性を透明色に設定して、半透明のツールバーを実装しました。

1)不透明ツールバーのテーマを1つ作成します。

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

    <!-- Toolbar background color -->
    <item name="colorPrimary">#ff212cff</item>

</style>

透明/オーバーレイツールバーの2番目のテーマ:

<style name="AppTheme.Overlay" parent="AppTheme">
    <item name="colorPrimary">@color/transparent</item>
</style>

2)アクティビティレイアウトで、コンテンツの前にツールバーを配置して、その前に表示できるようにします。

<RelativeLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical">

    <fragment
        Android:id="@+id/container"
        Android:name="com.test.CustomFragment"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"/>

    <Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="?attr/colorPrimary"
        Android:minHeight="?attr/actionBarSize"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"/>

</RelativeLayout>

3)AndroidManifest.xmlの透過性テーマをアクティビティに適用します

    <activity
        Android:name="com.test.TransparentActivity"
        Android:parentActivityName="com.test.HomeActivity"
        Android:theme="@style/AppTheme.Overlay" >
        <meta-data
            Android:name="Android.support.PARENT_ACTIVITY"
            Android:value="com.test.HomeActivity" />
    </activity>
5
Andy

ツールバーを透明にする最も簡単な方法は、@ colorsセクションで不透明度を定義し、@でTransparentThemeを定義することです。 stylesセクションを作成し、これらの定義をツールバーに配置します。

@ colors.xml

<color name="actionbar_opacity">#33000000</color>

@ styles.xml

<style name="TransparentToolbar" parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="Android:windowActionBarOverlay">true</item>
    <item name="windowActionBarOverlay">true</item>
</style>

@ activity_main.xml

<Android.support.v7.widget.Toolbar
        Android:id="@+id/toolbar"
        Android:layout_width="match_parent"
        Android:background="@color/actionbar_opacity"
        app:theme="@style/TransparentToolbar"
        Android:layout_height="?attr/actionBarSize"/>

それが結果です:

スクリーンショット透明ツールバー

5
Jonoid

おそらく、この投稿をご覧になる必要があります AppCompat-v7 21を備えた透明なActionbar

投稿が示唆する点は

  1. RelativeLayoutを使用してツールバーと本体を配置することを確認してください。
  2. 最後にツールバーを配置します。
  3. ツールバーのAndroid:background属性に透明色を設定します

これで、面倒なことなく問題を解決できます。

4
sancho21

AppBarLayoutタグにAndroid:background = "#10000000"を追加するだけです

2
Abu bakar

https://stackoverflow.com/a/37672153/291414 助けてくれました。

アクティビティ用にこのレイアウトを作成しました。

<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.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"
    Android:fitsSystemWindows="true"
    >

    <Android.support.design.widget.AppBarLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="@color/transparent" <- Add transparent color in AppBarLayout.
        Android:theme="@style/AppTheme.AppBarOverlay"
        >

        <Android.support.v7.widget.Toolbar
            Android:id="@+id/toolbar"
            Android:layout_width="match_parent"
            Android:layout_height="?android:attr/actionBarSize"
            Android:theme="@style/ToolbarTheme"
            app:popupTheme="@style/AppTheme.PopupOverlay"
            app:theme="@style/ToolbarTheme"
            />

    </Android.support.design.widget.AppBarLayout>

    <FrameLayout
        Android:id="@+id/container"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        <- Remove app:layout_behavior=...
        />

</Android.support.design.widget.CoordinatorLayout>

これが機能しない場合は、アクティビティのonCreate()に書き込みます(ツールバーは@ + id/toolbar):

toolbar.background.alpha = 0

半透明の色(#30ff00ffなど)を設定する場合は、toolbar.setBackgroundColor(color)を設定します。または、AppBarLayoutの背景色を設定します。

私の場合、AppBarLayoutToolbarのスタイルは役割を果たしませんでした。

2
CoolMind

私はパーティーに遅れていることを知っています。 Toolbar透明度を管理する単純なクラスを作成しました。

import Android.annotation.SuppressLint;
import Android.graphics.drawable.ColorDrawable;
import Android.support.v7.widget.Toolbar;



public class TransparentToolbarManager {

    private Toolbar mToolbar;
    private ColorDrawable colorDrawable;
    public static final int MAX_ALPHA = 255, MIN_ALPHA = 0;

    public TransparentToolbarManager(Toolbar mToolbar) {
        this.mToolbar = mToolbar;
        this.colorDrawable = new ColorDrawable(mToolbar.getContext().getResources().getColor(R.color.colorPrimary));
    }

    public TransparentToolbarManager(Toolbar mToolbar, ColorDrawable colorDrawable) {
        this.mToolbar = mToolbar;
        this.colorDrawable = colorDrawable;
    }

    //Fading toolbar
    public void manageFadingToolbar(int scrollDistance) {
        if (mToolbar != null && colorDrawable != null) {
            //FadeinAndOut according to the horizontal scrollValue
            if (scrollDistance <= MAX_ALPHA && scrollDistance >= MIN_ALPHA) {
                setToolbarAlpha(scrollDistance);
            } else if (scrollDistance > MAX_ALPHA) {
                setToolbarAlpha(MAX_ALPHA);
            }
        }
    }


    @SuppressLint("NewApi")
    public void setToolbarAlpha(int i) {
        colorDrawable.setAlpha(i);
        if (CommonHelper.isSupport(16)) {
            mToolbar.setBackground(colorDrawable);
        } else {
            mToolbar.setBackgroundDrawable(colorDrawable);
        }
    }


}

およびCommonHelper.isSupport()

public static boolean isSupport(int apiLevel) {
        return Build.VERSION.SDK_INT >= apiLevel;
}
2
theapache64

以下のコードを試してください

<Android.support.design.widget.AppBarLayout
                    Android:id="@+id/app_bar"
                    Android:layout_width="match_parent"
                    Android:layout_height="wrap_content"
                    Android:theme="@style/AppTheme.Transparent"
                    >
                        <Android.support.v7.widget.Toolbar
                            Android:id="@+id/toolbar"
                            Android:layout_width="match_parent"
                            Android:layout_height="?attr/actionBarSize"
                            app:popupTheme="@style/AppTheme.PopupOverlay" />
                </Android.support.design.widget.AppBarLayout>

style.xml

<style name="AppTheme.Transparent" parent="ThemeOverlay.AppCompat.Light">
        <item name="colorPrimary">@Android:color/transparent</item>
        <item name="colorControlActivated">@color/colorWhite</item>
        <item name="colorControlNormal">@color/colorWhite</item>
    </style>
1
Sỹ Phạm

ツールバーv7をサポートAndroid.support.v7.widget.Toolbar

コード

toolbar.setBackground(null);
// or
toolbar.setBackgroundColor(ContextCompat.getColor(getContext(), Android.R.color.transparent));

xmlAndroid:background="@null"またはAndroid:background="@Android:color/transparent"

<Android.support.v7.widget.Toolbar
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:layout_alignParentTop="true"
    Android:background="@null"
    Android:minHeight="?attr/actionBarSize"
    Android:theme="@style/Theme.AppCompat.Light.DarkActionBar">

    <TextView
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:textColor="@Android:color/white"
        Android:ellipsize="start"
        Android:singleLine="true"
        Android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"/>
</Android.support.v7.widget.Toolbar>

タイトルが非表示の場合、textColorを設定します

1
user25