Riempimento barra degli strumenti API 21 Android


193

Come posso eliminare il riempimento aggiuntivo nella nuova barra degli strumenti con Android SDK API versione 21 (la libreria di supporto)?

Sto parlando delle frecce rosse su questa immagine: inserisci qui la descrizione dell'immagine

Ecco il codice che sto usando:

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

Come puoi vedere ho impostato tutta l'imbottitura rilevante su 0, ma c'è ancora un'imbottitura attorno allo Spinner. Cosa ho fatto di sbagliato o cosa devo fare per liberarmi dell'imbottitura extra?

Modifica Alcuni si sono chiesti perché sto provando a farlo.

Secondo le specifiche di Material Design, lo spinner dovrebbe essere 72dp dal lato sinistro disc

Devo neutralizzare l'imbottitura che Google ha messo lì per posizionare correttamente il mio spinner: disc

Modifica 2

In base alla risposta di Chris Bane di seguito, ho impostato contentInsetStart su 0. Per la libreria di supporto è necessario utilizzare lo spazio dei nomi dell'app:

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

Spero che questo aiuti qualcuno, mi ha confuso per diversi giorni.


4
sei riuscito anche a rimuovere le imbottiture superiore / inferiore? Ho provato ma non succede nulla anche impostando tutte le contentInsetXproprietà su 0dp.
patrickjason91,

simile a @ patrickjason91 è possibile allineare ImageView con la barra degli strumenti in alto (l'immagine ha w, h: wrap_content) all'interno della barra degli strumenti? Stavo provando tutto ma non riuscivo a realizzarlo. Il mio obiettivo è avere qualcosa come l'immagine del nastro segnalibro "appesa" dalla parte superiore della barra degli strumenti, scommetto che c'è sempre un po 'di riempimento che non riesco ad eliminarlo
Ewoks

Risposte:


280

L'inserto sinistro è causato dalla barra degli strumenti contentInsetStartche per impostazione predefinita è 16dp.

Cambia questo a 72dp per allinearlo alla linea di base.

Aggiornamento per la libreria di supporto v24.0.0:

Per abbinare le specifiche di Material Design c'è un attributo aggiuntivo contentInsetStartWithNavigationche per impostazione predefinita è 16dp. Cambia questo se hai anche un'icona di navigazione.


Grazie mille per questo. Sembra un po 'strano allontanarsi dall'imbottitura e dal margine però. È una cosa Android 5?
James Cross,

1
ContentInsetStart viene utilizzato per inserire da qualsiasi interfaccia utente fornita dalla barra degli strumenti (ad esempio l'icona di navigazione).
Chris Banes,

E come allineare il pulsante di opzione con l'icona nella barra degli strumenti? Ho problemi simili: stackoverflow.com/questions/26623042/…
Ferran Negre,

C'è anche titleMarginStart attr per il padding del titolo
deviante l'

2
l'impostazione contentInsetStartWithNavigationsu 0 mi ha aiutato con support-v4: 25.0.1
Quentin G.

145

La risposta sopra è corretta ma c'è ancora una cosa che potrebbe creare problemi (almeno ha creato un problema per me)

Ho usato quanto segue e non funziona correttamente su dispositivi meno recenti -

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

Il trucco è qui basta usare il seguente -

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

e sbarazzarsi di -

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

E ora dovrebbe funzionare bene su tutti i dispositivi.

Spero che sia d'aiuto.


questo potrebbe essere il comportamento predefinito. Grazie =)
Luciano Rodríguez,

2
Non funziona per CollapsingToolBarLayout. Mi aiuti per favore .
Aslam Hossin,

aggiungendo android: padding = "0dp" mi ha aiutato
AITAALI_ABDERRAHMANE

1
insieme ai 4 indicati sopra, app:contentInsetStartWithNavigationpotrebbe aiutare a risolvere le cose se non già abbastanza
computingfreak

10

Aggiungi semplicemente queste due righe nella barra degli strumenti. Quindi otteniamo un nuovo bcoz spazio laterale sinistro rimosso di default 16dp.

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

9

Nel caso in cui qualcun altro inciampi qui ... puoi impostare anche l' imbottitura , ad esempio:

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

int padding = 200 // padding left and right

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

O contentInset :

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

non è necessario convertire l'imbottitura in dp e tenere conto della densità di visualizzazione.
Someone Somewhere

3

Ecco cosa ho fatto e funziona perfettamente su ogni versione di 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 (per nascondere il titolo della barra degli strumenti predefinita)

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

Risultato con le linee chiave visualizzate

inserisci qui la descrizione dell'immagine


3

Rendi la tua barra degli strumenti simile a:

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

Devi aggiungere

contentInset

attributo per aggiungere spaziatura

segui questo link per ulteriori informazioni - Suggerimenti per Android


3

Una combinazione di

android:padding="0dp" Nel file XML per la barra degli strumenti

e

mToolbar.setContentInsetsAbsolute(0, 0) Nel codice

Questo ha funzionato per me.


1

questo funziona per me sul mio telefono 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>

nota: non ho avuto assolutamente successo con padding = 0 o contentInsetLeft = 0 o contentInsetStart = 0


0

Ok, quindi se hai bisogno di 72dp, non potresti semplicemente aggiungere la differenza nel riempimento nel file xml? In questo modo mantieni Androids Inset / Padding predefinito che vogliono che usiamo.

Quindi: 72-16 = 56

Pertanto: aggiungi un'imbottitura di 56dp per posizionarti su un rientro / margine totale di 72dp.

Oppure potresti semplicemente cambiare i valori nei file Dimen.xml. questo è quello che sto facendo ora. Cambia tutto, l'intero layout, compresa la barra degli strumenti quando implementato nel nuovo modo Android.

Dimen File di risorse

Il collegamento che ho aggiunto mostra i valori Dimen a 2dp perché l'ho modificato ma era impostato di default a 16dp. Cordiali saluti ...


-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.