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>
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"/>
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:
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.
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.
La barre d'outils fonctionne comme une vue, la réponse est donc très simple.
toolbar.getBackground().setAlpha(0);
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.
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.
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>
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:
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>`
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
Cela devrait résoudre le problème sans trop de soucis.
Ajoutez simplement Android: background = "# 10000000" dans votre tag AppBarLayout Cela fonctionne
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;
}
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>
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
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.
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
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"