web-dev-qa-db-fra.com

Android: supprime la marge gauche de la présentation personnalisée de la barre d'actions

J'utilise une vue de barre d'actions personnalisée et, comme vous pouvez le constater dans la capture d'écran ci-dessous, la barre d'action contient un espace gris. Je veux l'enlever.

enter image description here

Qu'est-ce que j'ai fait:

res/values-v11/styles.xml

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="Android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>
</style>

res/values ​​/ my_custom_actionbar.xml

<resources xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <style name="ActionBarStyle" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="Android:height">60dp</item>
    </style>
</resources>

Manifeste

<uses-sdk
        Android:minSdkVersion="10"
        Android:targetSdkVersion="19" />

<application
            Android:icon="@drawable/ic_launcher"
            Android:label="@string/AppName"
            Android:theme="@style/AppBaseTheme" >
    <!-- activities... etc -->
</application>

Activité principale

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);

    ActionBar actionbar = getSupportActionBar();

    actionbar.setDefaultDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayHomeAsUpEnabled(false);
    actionbar.setDisplayShowCustomEnabled(true);
    actionbar.setDisplayShowHomeEnabled(false);
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayUseLogoEnabled(false);
    actionbar.setHomeButtonEnabled(false);

    // Add the custom layout
    View view = LayoutInflater.from(this).inflate(R.layout.actionbar, null, false);
    actionbar.setCustomView(view);
}

J'ai trouvé un article récent qui indique qu'il y a un problème avec la dernière version. J'ai également mis à jour ADT et SDK sur Android 5.

La vue personnalisée de la barre d'action Android ne remplit pas le parent

Je ne sais pas ce que je devrais faire.

Edit (solution partielle):

Ne fonctionne pas sur Android <= API 10.

Android Lollipop, la vue personnalisée AppCompat ActionBar ne prend pas toute la largeur de l'écran

Qu'est-ce que j'ai changé:

Utilisez la dernière version de sdk:

<uses-sdk
        Android:minSdkVersion="10"
        Android:targetSdkVersion="21" />

Ajouter une toolbarStyle:

<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
        <item name="Android:actionBarStyle">@style/ActionBarStyle</item>
        <item name="actionBarStyle">@style/ActionBarStyle</item>

        <item name="Android:toolbarStyle">@style/ToolbarStyle</item>
        <item name="toolbarStyle">@style/ToolbarStyle</item>
</style>

<style name="ToolbarStyle" parent="@style/Widget.AppCompat.Toolbar">
    <item name="contentInsetStart">0dp</item>
    <item name="Android:contentInsetStart">0dp</item>
</style>
205
Zbarcea Christian

Si vous ajoutez la variable Toolbar via XML, vous pouvez simplement ajouter des attributs XML pour supprimer les incrustations de contenu.

<Android.support.v7.widget.Toolbar
    xmlns:app="schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="@color/primaryColor"
    Android:contentInsetLeft="0dp"
    Android:contentInsetStart="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetStart="0dp"
    Android:contentInsetRight="0dp"
    Android:contentInsetEnd="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetEnd="0dp" />
493
LukeWaggoner

essaye ça:

    ActionBar actionBar = getSupportActionBar();
    actionBar.setDisplayShowHomeEnabled(false);
    actionBar.setDisplayShowCustomEnabled(true);
    actionBar.setDisplayShowTitleEnabled(false);
    View customView = getLayoutInflater().inflate(R.layout.main_action_bar, null);
    actionBar.setCustomView(customView);
    Toolbar parent =(Toolbar) customView.getParent();
    parent.setPadding(0,0,0,0);//for tab otherwise give space in tab
    parent.setContentInsetsAbsolute(0,0);

J'ai utilisé ce code dans mon projet, bonne chance;

189
cocotyty

L'encart gauche est provoqué par la variable contentInsetStart de la barre d'outils, qui est par défaut 16dp.

Changez-le pour vous aligner sur la ligne de touche.

Mise à jour de la bibliothèque de support v24.0.0: 

Pour correspondre à la spécification Material Design, un attribut supplémentaire, contentInsetStartWithNavigation, par défaut, 16dp. Changer ceci si vous avez aussi une icône de navigation.

Il s'est avéré que cela fait partie d'une nouvelle spécification de conception de matériel introduite dans la version 24 de Design Library.

https://material.google.com/patterns/navigation.html

Toutefois, il est possible de supprimer l'espace supplémentaire en ajoutant la propriété suivante au widget Barre d'outils.

app:contentInsetStartWithNavigation="0dp"

Avant : enter image description here

Après : enter image description here

33
Naveen Kumar M

J'ai trouvé une autre résolution (référence appcompat-v7) modifiant le toolbarStyle, code suivant:

<item name="toolbarStyle">@style/Widget.Toolbar</item>


<style name="Widget.Toolbar" parent="@style/Widget.AppCompat.Toolbar">
<item name="contentInsetStart">0dp</item>
</style>
23
madhu sudhan
<Android.support.v7.widget.Toolbar
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="wrap_content"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"
Android:paddingLeft="0dp">

Cela devrait suffire.

13
Prakash

Il suffit de modifier vos styles.xml

<!-- ActionBar styles -->
    <style name="MyActionBar" parent="Widget.AppCompat.ActionBar">
        <item name="contentInsetStart">0dp</item>
        <item name="contentInsetEnd">0dp</item>
    </style>
8
Nilesh Senta

Au lieu d'ajouter une barre d'outils dans la présentation, vous pouvez définir votre vue personnalisée comme indiqué ci-dessous.

Toolbar parent = (Toolbar) customView.getParent();
parent.setContentInsetsAbsolute(0,0);
7
Raja Jawahar

Ajoutez seulement app:contentInsetStart="0dp" à la barre d’outils et supprimez cet espace.

Donc, votre définition de barre d'outils ressemble à ceci

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

et ça ressemble à ça

 enter image description here

6
Keyur Lakhani

Vous devez ajouter cette ligne app2: contentInsetStart = "0dp" dans votre barre d'outils 

<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:app2="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="?attr/actionBarSize"
    Android:background="@color/colorPrimary"
    app2:contentInsetStart="0dp"/>
3
Rahul

En utilisant AppCompatAcitivty, vous pouvez utiliser simplement par 

Toolbar mToolbar = (Toolbar) findViewById(R.id.toolbar);
View logo = getLayoutInflater().inflate(R.layout.custom_toolbar, null);
mToolbar.addView(logo, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
mToolbar.setContentInsetsAbsolute(0,0);
3
deadfish

Je n'ai trouvé aucune solution à mon problème (première photo) où que ce soit, mais j'ai finalement trouvé la solution la plus simple après quelques heures de recherche. Veuillez noter que j'ai essayé avec beaucoup d'attributs XML tels que app:setInsetLeft="0dp", etc., mais aucun d'entre eux n'a été utile dans ce cas.

Image 1  enter image description here

le code suivant a résolu ce problème comme dans l'image 2

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);


    //NOTE THAT: THE PART SOLVED THE PROBLEM.
    Android.support.design.widget.AppBarLayout abl = (AppBarLayout)
            findViewById(R.id.app_bar_main_app_bar_layout);

    abl.setPadding(0,0,0,0);
}

Photo 2

 enter image description here

1
mifthi

La définition des attributs "contentInset ..." sur 0 dans la barre d'outils ne fonctionnait pas pour moi La solution de Nilesh Senta pour mettre à jour le style a fonctionné!

styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarStyle">@style/Actionbar</item>
    <item name="Android:titleTextStyle">@style/ActionbarTitle</item>
</style>

<style name="Actionbar" parent="Widget.AppCompat.ActionBar">
    <item name="contentInsetStart">0dp</item>
    <item name="contentInsetEnd">0dp</item>
</style>

Java (onCreate)

ActionBar actionBar =  getSupportActionBar();

actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);

ActionBar.LayoutParams layoutParams = new ActionBar.LayoutParams(
            ActionBar.LayoutParams.MATCH_PARENT,
            ActionBar.LayoutParams.MATCH_PARENT
    );

View view = LayoutInflater.from(this).inflate(R.layout.actionbar_main, null);

actionBar.setCustomView(view, layoutParams);
0
Poseidon

Créer une barre d'outils comme ceci:

<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/menuToolbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_margin="0dp"
Android:background="@color/white"
Android:contentInsetLeft="10dp"
Android:contentInsetRight="10dp"
Android:contentInsetStart="10dp"
Android:minHeight="?attr/actionBarSize"
Android:padding="0dp"
app:contentInsetLeft="10dp"
app:contentInsetRight="10dp"
app:contentInsetStart="10dp"></Android.support.v7.widget.Toolbar>

s'il vous plaît suivez ce lien pour plus - Conseils Android

0
Aneh Thakur
ActionBar ab = getSupportActionBar();
ab.setDisplayShowHomeEnabled(true);
      ab.setDisplayShowCustomEnabled(true);
      setDisplayShowTitleEnabled(true);
      View customView =     getLayoutInflater().inflate(R.layout.activity_main,null); //here activity_main.xml is the GUI design file.
ab.setCustomView(customView);
Toolbar parent =(Toolbar) customView.getParent(); //use V7 Toolbar import
parent.setContentInsetsAbsolute(0, 0);
setPadding(5,0,0,0);

ab.setIcon(R.mipmap.ic_launcher);
0
user5415112

Il serait préférable d’ajouter un élément d’arrière-plan dans le style de la barre d’actions de l’application afin de correspondre à la couleur d’arrière-plan de la barre d’actions personnalisée:

<item name="Android:background">@color/actionbar_bgcolor</item>

Après Android 6.0, la barre d’action dispose même d’un espace à droite et ne peut pas être définie. Ajoutez une marge droite en ajustant l’activité comme ceci: (le vue est la barre d'action personnalisée ou un bouton droit dedans)

int rightMargin = Build.VERSION.SDK_INT>=Build.VERSION_CODES.M ? 0 : 8; // may the same with actionbar leftMargin in px
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) view.getLayoutParams();
p.setMargins(p.leftMargin, p.topMargin, rightMargin, p.bottomMargin);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1){
    p.setMarginEnd(rightMargin);
}
view.setLayoutParams(p);

Le machenism de la barre d’action est juste supporté après l’application Android 3.0+. Si nous utilisons plutôt une barre d’outils (de support lib v7), nous devons la disposer dans chaque xml de chaque activité et régler le problème du chevauchement avec la barre d’état du système dans le périphérique Android 5.0 ou ultérieur.

0
Shrdi

ajouter seulement Android:padding="0dp" travail pour moi

<Android.support.v7.widget.Toolbar
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:layout_width="match_parent"
    Android:layout_height="60dp"
    Android:padding="0dp"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
0
Victor

La réponse correcte et la plus simple est sur un autre post, ceci:

Android Lollipop, la vue personnalisée AppCompat ActionBar ne prend pas toute la largeur de l'écran

Il est marqué comme correct et, après avoir essayé cela, je peux confirmer que cela fonctionne.

0
Ale Muzzi

Vous pouvez simplement utiliser une disposition relative dans le groupe de vues de la barre d’outils de votre fichier xml et ajuster les positions des widgets selon vos besoins pour votre cas d’utilisation. Il est inutile de créer une disposition personnalisée, de la gonfler et de la joindre à la barre d’outils. Une fois cette opération effectuée dans votre code Java, utilisez setContentInsetsAbsolute (0,0) avec votre objet de barre d’outils avant de le définir en tant que barre d’action de support dans votre présentation.

Kotlin

    supportActionBar?.displayOptions = ActionBar.DISPLAY_SHOW_CUSTOM;
    supportActionBar?.setCustomView(R.layout.actionbar);

    val parent = supportActionBar?.customView?.parent as Toolbar
    parent?.setPadding(0, 0, 0, 0)//for tab otherwise give space in tab
    parent?.setContentInsetsAbsolute(0, 0)
0
Chen Jiling

ce travail pour moi

toolbar.setPadding(0,0,0,0);
toolbar.setContentInsetsAbsolute(0,0);
0
Maysam R