Android API 21 Toolbar Padding

193

Wie entferne ich das zusätzliche Auffüllen in der neuen Symbolleiste mit der Android SDK API Version 21 (der Support-Bibliothek)?

Ich spreche von den roten Pfeilen auf diesem Bild: Geben Sie hier die Bildbeschreibung ein

Hier ist der Code, den ich verwende:

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

Wie Sie sehen können, habe ich alle relevanten Auffüllungen auf 0 gesetzt, aber es gibt immer noch Auffüllungen um den Spinner. Was habe ich falsch gemacht oder was muss ich tun, um die zusätzliche Polsterung loszuwerden?

Bearbeiten Einige haben gefragt, warum ich das versuche.

Gemäß den Material Design-Spezifikationen sollte der Spinner 72 dp von der linken Seite entfernt sein absteigend

Ich muss die Polsterung neutralisieren, die Google dort angebracht hat, um meinen Spinner richtig zu platzieren: absteigend

Bearbeiten 2

Gemäß der Antwort von Chris Bane unten habe ich contentInsetStart auf 0 gesetzt. Für die Support-Bibliothek müssen Sie den App-Namespace verwenden:

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

Ich hoffe das hilft jemandem, es hat mich einige Tage verwirrt.

James Cross
quelle
4
Haben Sie es auch geschafft, die oberen / unteren Polster zu entfernen? Ich habe es versucht, aber es passiert nichts, auch wenn alle contentInsetXEigenschaften auf 0dp gesetzt wurden.
Patrickjason91
Ähnlich wie bei @ patrickjason91 ist es möglich, ImageView an der Symbolleiste oben (Bild hat w, h: wrap_content) in der Symbolleiste auszurichten? Ich habe alles versucht, konnte es aber nicht schaffen. Mein Ziel ist es, dass so etwas wie ein Lesezeichenband oben in der Symbolleiste "hängt". Ich wette, es gibt immer eine Polsterung, die ich nicht beseitigen kann
Ewoks

Antworten:

280

Der linke Einschub wird durch contentInsetStartSymbolleisten verursacht, die standardmäßig 16 dp betragen.

Ändern Sie dies in 72dp, um es an der Keyline auszurichten.

Update für die Support-Bibliothek v24.0.0:

Um der Material Design-Spezifikation zu entsprechen, gibt es ein zusätzliches Attribut, contentInsetStartWithNavigationdas standardmäßig 16 dp beträgt. Ändern Sie dies, wenn Sie auch ein Navigationssymbol haben.

Chris Banes
quelle
Vielen Dank dafür. Scheint ein bisschen seltsam, sich von Polsterung und Rand zu entfernen. Ist das eine Android 5 Sache?
James Cross
1
Der contentInsetStart wird zum Einfügen in eine von der Symbolleiste bereitgestellte Benutzeroberfläche (z. B. das Navigationssymbol) verwendet.
Chris Banes
Und wie würden Sie den Radiobutton an dem Symbol in der Symbolleiste ausrichten? Ich habe ähnliche Probleme: stackoverflow.com/questions/26623042/…
Ferran Negre
Es gibt auch titleMarginStart attr für das Auffüllen von Titeln
abweichend
2
Das Setzen contentInsetStartWithNavigationauf 0 hat den Trick für mich mit support-v4: 25.0.1
Quentin G.
145

Die obige Antwort ist richtig, aber es gibt immer noch eine Sache, die Probleme verursachen könnte (zumindest hat sie ein Problem für mich verursacht).

Ich habe Folgendes verwendet und es funktioniert auf älteren Geräten nicht richtig -

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

Der Trick ist hier einfach folgendes zu verwenden -

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

und loswerden -

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

Und jetzt sollte es auf allen Geräten gut funktionieren.

Ich hoffe es hilft.

Varundroid
quelle
Dies ist möglicherweise das Standardverhalten. Danke =)
Luciano Rodríguez
2
Funktioniert nicht für CollapsingToolBarLayout. Bitte hilf mir .
Aslam Hossin
android hinzufügen: padding = "0dp" hat mir geholfen
AITAALI_ABDERRAHMANE
1
zusammen mit den 4 oben genannten, app:contentInsetStartWithNavigationkönnte helfen, Dinge zu beheben, wenn nicht bereits genug
Computingfreak
10

Simpley fügt diese beiden Zeilen in die Symbolleiste ein. Dann bekommen wir neue entfernte linke Seite Raum bcoz standardmäßig es 16dp.

android:contentInsetStart="0dp"
app:contentInsetStart="0dp"
Amit Walke
quelle
9

Falls hier jemand anderes stolpert ... können Sie auch die Polsterung einstellen , zum Beispiel:

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

int padding = 200 // padding left and right

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

Oder contentInset :

toolbar.setContentInsetsAbsolute(toolbar.getContentInsetLeft(), 200);
hat funktioniert
quelle
Müssen Sie die Polsterung nicht in dp umwandeln und die Anzeigedichte berücksichtigen?
Jemand irgendwo
3

Hier ist, was ich getan habe und es funktioniert perfekt auf jeder Version von 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 (Zum Ausblenden des Standardsymbols in der Symbolleiste)

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

Ergebnis mit angezeigten Keylines

Geben Sie hier die Bildbeschreibung ein

Michael
quelle
3

Machen Sie Ihre Symbolleiste wie folgt:

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

Sie müssen hinzufügen

contentInset

Attribut zum Hinzufügen von Abständen

Bitte folgen Sie diesem Link für mehr - Android-Tipps

Aneh Thakur
quelle
3

Eine Kombination aus

android:padding="0dp" In der XML für die Symbolleiste

und

mToolbar.setContentInsetsAbsolute(0, 0) Im Code

Das hat bei mir funktioniert.

Jraco11
quelle
1

Dies funktioniert für mich auf meinem Android 7.11-Handy:

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

Hinweis: Ich hatte absolut keinen Erfolg mit padding = 0 oder contentInsetLeft = 0 oder contentInsetStart = 0

Irgendwer irgendwo
quelle
0

Ok, wenn Sie 72dp benötigen, können Sie dann nicht einfach den Unterschied beim Auffüllen in die XML-Datei einfügen? Auf diese Weise behalten Sie Androids Standard-Inset / Padding bei, die wir verwenden sollen.

Also: 72-16 = 56

Dazu: Fügen Sie 56dp Polster hinzu, um einen Einzug / Rand von insgesamt 72dp zu erzielen.

Oder Sie können einfach die Werte in den Dateien Dimen.xml ändern. das mache ich jetzt Es ändert alles, das gesamte Layout, einschließlich der ToolBar, wenn es auf die neue richtige Android-Art implementiert wird.

Dimen Resource File

Der Link, den ich hinzugefügt habe, zeigt die Dimen-Werte bei 2dp, da ich sie geändert habe, aber standardmäßig auf 16dp eingestellt war. Nur zur Info...

JamisonMan111
quelle
-2
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0);
Ahmet Zorer
quelle