Remplissage de la barre d'outils Android API 21


193

Comment puis-je me débarrasser du remplissage supplémentaire dans la nouvelle barre d'outils avec Android SDK API version 21 (la bibliothèque de support)?

Je parle des flèches rouges sur cette photo: entrez la description de l'image ici

Voici le code que j'utilise:

<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:background="?attr/colorPrimary"
        android:padding="0dp"
        android:layout_margin="0dp">

        <RelativeLayout
            android:id="@+id/action_bar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="0dp"
            android:padding="0dp"
            android:background="#000000">

            <Spinner
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        </RelativeLayout>
</Toolbar>

Comme vous pouvez le voir, j'ai mis tous les rembourrages pertinents à 0, mais il y a toujours du rembourrage autour du Spinner. Qu'est-ce que j'ai fait de mal ou que dois-je faire pour me débarrasser du rembourrage supplémentaire?

Modifier Certains se sont demandé pourquoi j'essayais de faire cela.

Selon les spécifications de conception des matériaux, le spinner doit être à 72dp du côté gauche desc

Je dois neutraliser le rembourrage que Google y a mis afin de placer correctement mon spinner: desc

Modifier 2

Selon la réponse de Chris Bane ci-dessous, j'ai mis contentInsetStart à 0. Pour la bibliothèque de support, vous devrez utiliser l'espace de noms de l'application:

<android.support.v4.widget.DrawerLayout
    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.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="@dimen/action_bar_height"
        android:background="?attr/colorPrimary"
        android:contentInsetStart="0dp"
        android:contentInsetLeft="0dp"
        app:contentInsetLeft="0dp"
        app:contentInsetStart="0dp"
        app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

</android.support.v4.widget.DrawerLayout>

J'espère que cela aide quelqu'un, ça m'a dérouté pendant plusieurs jours.


4
avez-vous également réussi à retirer les rembourrages supérieur / inférieur? J'ai essayé mais rien ne se passe même en définissant toutes les contentInsetXpropriétés sur 0dp.
patrickjason91

similaire à @ patrickjason91, est-il possible d'aligner ImageView avec le haut de la barre d'outils (l'image a w, h: wrap_content) à l'intérieur de la barre d'outils? J'essayais tout mais je n'ai pas pu y arriver. Mon objectif est d'avoir quelque chose comme une image de ruban de signet "suspendue" en haut de la barre d'outils, je parie qu'il y a toujours du rembourrage que je ne peux pas éliminer
Ewoks

Réponses:


280

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

Changez-le en 72dp pour l'aligner sur la ligne de touche.

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

Pour correspondre à la spécification Material Design, il existe un attribut supplémentaire contentInsetStartWithNavigationqui, par défaut, est 16dp. Modifiez cela si vous avez également une icône de navigation.


Merci beaucoup pour cela. Cela semble un peu étrange de s'éloigner du rembourrage et de la marge. Est-ce une chose Android 5?
James Cross

1
ContentInsetStart est utilisé pour insérer à partir de n'importe quelle interface utilisateur fournie par la barre d'outils (par exemple l'icône de navigation).
Chris Banes

Et comment aligneriez-vous le bouton radio avec l'icône de la barre d'outils? J'ai des problèmes similaires: stackoverflow.com/questions/26623042/…
Ferran Negre

Il y a aussi un titreMarginStart attr pour le remplissage du titre
déviant

2
mettre contentInsetStartWithNavigationà 0 a fait l'affaire pour moi avec support-v4: 25.0.1
Quentin G.

145

La réponse ci-dessus est correcte mais il y a encore une chose qui pourrait créer des problèmes (au moins, cela a créé un problème pour moi)

J'ai utilisé ce qui suit et cela ne fonctionne pas correctement sur les appareils plus anciens -

android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"
app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"

L'astuce est ici, utilisez simplement ce qui suit -

app:contentInsetLeft="0dp"
app:contentInsetStart="0dp"

et se débarrasser de -

android:contentInsetStart="0dp"
android:contentInsetLeft="0dp"

Et maintenant, cela devrait fonctionner correctement sur tous les appareils.

J'espère que ça aide.


ce pourrait être le comportement par défaut. Merci =)
Luciano Rodríguez

2
Ne fonctionne pas pour CollapsingToolBarLayout. Aidez-moi, s'il vous plaît .
Aslam Hossin

l'ajout d'Android: padding = "0dp" m'a aidé
AITAALI_ABDERRAHMANE

1
ainsi que les 4 énoncés ci-dessus, app:contentInsetStartWithNavigationpourraient aider à réparer les choses s'ils ne sont pas déjà assez
computingfreak

10

Ajoutez simplement ces deux lignes dans la barre d'outils. Ensuite, nous obtenons un nouvel espace gauche supprimé bcoz par défaut, il 16dp.

android:contentInsetStart="0dp"
app:contentInsetStart="0dp"

9

Dans le cas où quelqu'un d'autre trébuche ici ... vous pouvez également définir le remplissage , par exemple:

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

int padding = 200 // padding left and right

toolbar.setPadding(padding, toolbar.getPaddingTop(), padding, toolbar.getPaddingBottom());

Ou contentInset :

toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);

n'avez-vous pas besoin de convertir le rembourrage en dp et de prendre en compte la densité d'affichage.
Someone Somewhere

3

Voici ce que j'ai fait et cela fonctionne parfaitement sur chaque version d'Android.

toolbar.xml

<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="56dp"
    android:background="@color/primary_color"
    app:theme="@style/ThemeOverlay.AppCompat"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

    <TextView
        android:id="@+id/toolbar_title"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginLeft="16dp" <!-- Add margin -->
        android:layout_marginStart="16dp"
        android:gravity="left|center"
        android:text="Toolbar Title" <!-- Your title text -->
        android:textColor="@color/white" <!-- Matches default title styles -->
        android:textSize="20sp"
        android:fontFamily="sans-serif-medium"/>

</android.support.v7.widget.Toolbar>

MyActivity.java (pour masquer le titre de la barre d'outils par défaut)

getSupportActionBar().setDisplayShowTitleEnabled(false); // Hide default toolbar title

Résultat avec les lignes clés affichées

entrez la description de l'image ici


3

Faites votre barre d'outils comme:

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

Vous devez ajouter

contentInset

attribut pour ajouter un espacement

veuillez suivre ce lien pour en savoir plus - Astuces Android


3

Une combinaison de

android:padding="0dp" Dans le xml de la barre d'outils

et

mToolbar.setContentInsetsAbsolute(0, 0) Dans le code

Cela a fonctionné pour moi.


1

cela fonctionne pour moi sur mon téléphone Android 7.11:

<!-- TOOLBAR -->
<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:contentInsetStartWithNavigation="0dp">

    <TextView
        style="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"
        android:id="@+id/toolbar_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/create_account_title"
        android:textColor="@color/color_dark_grey"/>

</android.support.v7.widget.Toolbar>

note: je n'ai eu absolument aucun succès avec padding = 0, ou contentInsetLeft = 0, ou contentInsetStart = 0


0

Ok donc si vous avez besoin de 72dp, ne pourriez-vous pas simplement ajouter la différence de remplissage dans le fichier xml? De cette façon, vous conservez l'encart / remplissage par défaut d'Androids qu'ils souhaitent que nous utilisions.

Donc: 72-16 = 56

Pour cela: ajoutez un remplissage de 56dp pour vous mettre à un total de retrait / marge de 72dp.

Ou vous pouvez simplement modifier les valeurs dans les fichiers Dimen.xml. c'est ce que je fais maintenant. Il change tout, la disposition entière, y compris la barre d'outils lorsqu'elle est implémentée de la nouvelle manière Android appropriée.

Fichier de ressources Dimen

Le lien que j'ai ajouté montre les valeurs de Dimen à 2dp parce que je l'ai changé mais il était réglé par défaut à 16dp. Juste FYI...


-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.