web-dev-qa-db-fra.com

Comment rendre la barre d'outils transparente?

C’est un article de questions-réponses J’ai un ActionBar transparent qui recouvre la présentation. Après la migration vers la dernière bibliothèque de support, j'ai été contraint de supprimer la barre d'actions au profit de la barre d'outils. Les anciennes méthodes de transparence et de superposition de cette disposition ne fonctionnent plus.

<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>
51
Gleichmut

Tout ce que vous avez à faire est de définir un thème masquant la barre d’action, de définir un style de barre d’action avec un arrière-plan transparent et de définir ce style sur le widget de barre d’outils. Veuillez noter que la barre d’outils doit être dessinée en tant que dernière vue (sur l’arborescence de toutes les vues) 

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

Disposition:

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

Disposition de la barre d’outils:

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

Créez votre fichier toolbar.xml avec le fond d’appBarLayout est @null

<?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>

et voici le résultat:

 enter image description here

33
TranVo

Vérification de l'exemple de code source de Google J'ai découvert comment rendre la barre d'outils complètement transparente. C'était plus simple que je pensais. Nous devons juste créer une forme simple, dessinable comme ceci.

Le nom du dessinable est 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>

Et puis dans le fragment ou l'activité .. Ajoutez la barre d'outils comme ceci. 

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

Et nous aurons ici une barre d’outils totalement transparente.

 enter image description here

N'ajoutez pas le <Android.support.design.widget.AppBarLayout > si vous le faites, cela ne fonctionnera pas.

Remarque: Si vous avez besoin d'AppBarLayout, définissez l'élévation sur 0 afin qu'elle ne dessine pas son ombre.

26
Pedro Varela

La barre d'outils fonctionne comme une vue, la réponse est donc très simple.

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

Ajouter la ligne suivante dans 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>

Maintenant, ajoutez la ligne suivante dans style-v21,

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

et définissez le thème comme Android: theme = "@ style/AppTheme"

Cela rendra la barre d'état transparente.

11
Reprator

Il suffit d'utiliser le code XML suivant:

Code pour la mise en page:

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

Et ajoutez le code suivant dans le fichier colors.xml :

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

Cela vous donnera la sortie souhaitée.

7
V_J

J'ai implémenté translucent Toolbar en créant deux thèmes Theme.AppCompat.Light.NoActionBar et en définissant l'attribut colorPrimary sur couleur transparente.

1) Créez deux thèmes Créez un thème avec pour la barre d’outils opaque:

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

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

</style>

Deuxième thème pour la barre d’outils transparente/superposée:

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

2) Dans la présentation de votre activité, placez la barre d’outils derrière le contenu pour pouvoir l’afficher devant:

<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) Appliquez le thème transparent à votre activité dans 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

Le moyen le plus simple de définir une barre d’outils transparente consiste à définir une opacité dans la section @colors, à définir un TransparentTheme dans la section @styles, puis à les définir dans la barre d’outils.

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

C'est le résultat:

Capture d'écran de la barre d'outils transparente

5
Jonoid

Ajoutez simplement Android:background="@Android:color/transparent" comme ci-dessous dans la structure de votre barre d’application

<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>`
4
Rajesh.k

Peut-être devriez-vous jeter un coup d'œil à cet article Actionbar transparente avec AppCompat-v7 21

Les points suggérés par le post sont

  1. Assurez-vous simplement que vous utilisez RelativeLayout pour poser la barre d’outils et le corps.
  2. Mettez la barre d'outils dans le dernier.
  3. Mettre la couleur transparente pour Android: attribut d'arrière-plan de la barre d'outils

Cela devrait résoudre le problème sans trop de soucis.

4
sancho21

Ajoutez simplement Android: background = "# 10000000" dans votre tag AppBarLayout Cela fonctionne

2
Abu bakar

Je sais que je suis en retard pour la fête. J'ai créé une classe simple pour gérer la transparence 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);
        }
    }


}

et le CommonHelper.isSupport ()

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

essayez ci-dessous le code

<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

pour Support Toolbar v7 Android.support.v7.widget.Toolbar:

code

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

xml (Android:background="@null" ou 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>

si Title est invisible, définissez textColor

1
user25

https://stackoverflow.com/a/37672153/2914140 m'a aidé. 

J'ai fait cette mise en page pour une activité:

<?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>

Si cela ne fonctionne pas, dans onCreate() de l'activité d'écriture (où toolbar est @ + id/toolbar):

toolbar.background.alpha = 0

Si vous souhaitez définir une couleur semi-transparente (telle que # 30ff00ff), définissez toolbar.setBackgroundColor(color). Ou même définir une couleur de fond de AppBarLayout.

Dans mon cas, les styles AppBarLayout et Toolbar n'ont pas joué le rôle.

1
CoolMind

Seulement cela a fonctionné pour moi (bibliothèque de support AndroidX):

 <com.google.Android.material.appbar.AppBarLayout
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            Android:background="@null"
            Android:theme="@style/AppTheme.AppBarOverlay"
            Android:translationZ="0.1dp"
            app:elevation="0dp">

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

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

Ce code supprime l'arrière-plan dans toutes les vues nécessaires et supprime également l'ombre de AppBarLayout (ce qui posait un problème).

La réponse a été trouvée ici: https://code-examples.net/en/q/1ea52cc

0
oxied

Ajoutez le code ci-dessous au fichier styles.xml

<style name="LayoutPageTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
    <item name="Android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="windowActionBarOverlay">true</item>
    <item name="Android:actionBarStyle">@style/TransparentActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="TransparentActionBar"
    parent="@Android:style/Widget.Holo.Light.ActionBar">
    <item name="Android:background">@Android:color/transparent</item>
</style>

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

N'oubliez pas d'écrire: Android:background="@Android:color/transparent"

0
somya