2014-10-19 21 views
168

Wie entferne ich die zusätzliche Auffüllung in der neuen Toolbar mit Android SDK API Version 21 (die Support-Bibliothek)?Android API 21 Toolbar Padding

ich über die roten Pfeile auf diesem Bild spreche: enter image description here

Hier ist der Code 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, ich habe alle relevanten padding auf 0 gesetzt , aber um den Spinner herum gibt es immer noch Polsterungen. Was habe ich falsch gemacht oder was muss ich tun, um die zusätzliche Polsterung loszuwerden?

bearbeiten Einige haben in Frage gestellt, warum ich dies zu tun versuchen.

sich nach den Material Design-Spezifikationen, sollte die Spinner von der linken Seite 72dp sein desc

Ich brauche die Polsterung Google zu neutralisieren, haben es in Ordnung bringen richtig mein Spinner zu platzieren: desc

bearbeiten 2

Wie pro Chris Banes Antwort unten ich die contentInsetStart auf 0 Für die Support-Bibliothek festlegen müssen Sie die 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 für mehrere Tage verwirrt.

+4

haben Sie auch die oben/unten Polsterungen geschafft zu entfernen? Ich habe versucht, aber nichts passiert, auch wenn alle 'contentInsetX'-Eigenschaften auf 0dp gesetzt sind. – patrickjason91

+0

ähnlich wie @ patrickjason91 ist es möglich, ImageView mit Toolbar oben auszurichten (Bild hat w, h: wrap_content) in Toolbar? Ich habe alles versucht, aber ich konnte es nicht schaffen. Mein Ziel ist es, etwas wie ein Lesezeichen-Band-Bild von der Oberseite der Toolbar hängen zu lassen, wetten, dass es immer etwas Polsterung gibt, die ich nicht eliminieren kann – Ewoks

Antwort

242

Die linke Einfügung wird durch contentInsetStart der Toolbar verursacht, die standardmäßig 16dp ist.

Ändern Sie diese Einstellung auf 72dp, um sie an der Keyline auszurichten.

Update für Support-Bibliothek v24.0.0:

das Material Design Passend Spec gibt es ein zusätzliches Attribut contentInsetStartWithNavigation die standardmäßig 16dp ist. Ändern Sie dies, wenn Sie auch ein Navigationssymbol haben.

+0

Vielen Dank für Dies. Es erscheint ein bisschen seltsam, sich von der Polsterung und dem Rand wegzubewegen. Ist das eine android 5 Sache? –

+1

Der contentInsetStart wird verwendet, um eine von der Symbolleiste bereitgestellte Benutzeroberfläche zu verwenden (z. B. das Navigationssymbol). –

+0

Und wie würden Sie den Radiobutton mit dem Symbol in der Symbolleiste ausrichten? Ich habe ähnliche Probleme: http://stackoverflow.com/questions/26623042/align-an-icon-with-the-toolbar-icon-android-material-design –

130

Above Antwort ist richtig, aber es gibt noch eine Sache, die Probleme schaffen könnten (Zumindest ist es ein Problem für mich geschaffen hat)

habe ich die folgenden und es nicht richtig auf älteren Geräten funktioniert -

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

der Trick hier gerade ist verwenden Sie die folgende -

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

und loszuwerden -

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

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

Ich hoffe, es hilft.

+1

Danke, es hat gut funktioniert –

+0

dies könnte das Standardverhalten sein. Danke =) –

+0

Sie sind der beste :) –

1

Hier ist, was ich getan habe und es funktioniert perfekt auf jeder Android-Version.

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

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

Ergebnis mit Trennlinien gezeigt

(Zur Standard-Symbolleiste Titel zu verbergen) enter image description here

3

Symbolleiste Stellen wie:

<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 benötigen

contentInset

Attribut hinzufügen Abstand hinzuzufügen

bitte folgen Sie diesem Link für mehr - Android Tips

8

Falls jemand stolpert sonst hier ... Sie Polsterung als auch zum Beispiel festlegen:

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); 
0

Ok also, wenn Sie brauchen 72dp Könnten Sie nicht einfach den Unterschied in der Auffüllung in der XML-Datei hinzufügen? Auf diese Weise behalten Sie den Standard-Inset/Padding von Androids, den wir verwenden sollen.

So: 72-16 = 56

Dafür: add 56dp padding sich von 72dp bei einem Einzug/Marge insgesamt zu setzen.

Oder Sie könnten nur die Werte in den Dimen.xml-Dateien ändern. das mache ich jetzt. Es ändert alles, das gesamte Layout, einschließlich der ToolBar, wenn es in der neuen richtigen Android-Weise implementiert wird.

Dimen Resource File

Die Verbindung I zeigt bei 2dp die Dimen Werte hinzugefügt, weil ich es geändert, aber es war Standard bei 16dp gesetzt. Nur zur Info ...

3

Eine Kombination aus

android:padding="0dp" in der XML für die Toolbar

und

mToolbar.setContentInsetsAbsolute(0, 0) Im Code

Das ist für mich gearbeitet.

8

Simpel fügen Sie diese zwei Zeilen in der Symbolleiste hinzu.Dann bekommen wir ein neues linkes linkes Leerzeichen bcoz, standardmäßig ist es 16dp.

android:contentInsetStart="0dp" 
app:contentInsetStart="0dp" 
-1
((Toolbar)actionBar.getCustomView().getParent()).setContentInsetsAbsolute(0,0); 
Verwandte Themen