21

Ich habe ein Problem beim Zentrieren der Zurück-Schaltfläche in der Support-Symbolleiste. Ich verwende es in einer ActionBarActivity.So zentrieren Sie die Symbolleisten-Schaltfläche?

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:toolbar="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="?attr/colorPrimary" 
    android:minHeight="?attr/actionBarSize" 
    toolbar:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    toolbar:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> 

Und stellen Sie die oben Navigation innerhalb der Aktivitäten onCreate() wie folgt aus:

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

getSupportActionBar().setTitle(R.string.title_activity_scanner); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

Doch was ich bekomme, ist dies: not centered back button screenshot Wie Sie die Zurück-Taste sehen kann, ist fehl am Platz

Edit: Das Problem scheint in einem benutzerdefinierten Wert für ?attr/actionBarSize auf 40dp liegen, aber es stellt sich jetzt heraus, dass es der Titel ist, der mispla ist ced stattdessen.

+0

Einer der Aktion, die ich denke, deaktivieren Sie diese Schaltfläche zurück und legen Sie eine Schaltfläche Widget in und richten Sie es wie Sie wollen. Ich hoffe es hilft!!! –

+0

können Sie minHeight-Tag entfernen und Höhe als "? Attr/actionBarSize" anstelle von "wrap_content" –

+0

@Viren Ich möchte das Rad nicht wieder zu entdecken, wenn möglich – mewa

Antwort

53

Vom developer.android.com:

Toolbar unterstützt eine gezieltere Feature-Set als ActionBar. Von Anfang bis zum Ende kann eine Symbolleiste eine Kombination der folgenden optionalen Elemente enthalten:

Eine Navigationsschaltfläche. Dies kann ein Pfeil nach oben, ein Navigationsmenü, Schließen, Ausblenden, Fertig oder ein anderes Symbol der App sein. Diese Schaltfläche sollte immer verwendet werden, um auf andere Navigationsziele innerhalb des Containers der Toolbar und des zugehörigen Inhalts zuzugreifen, oder , andernfalls den aktuellen Kontext zu verlassen, der durch die Symbolleiste gekennzeichnet ist. Die Navigationsschaltfläche ist vertikal innerhalb der Toolbar-Mindesthöhe ausgerichtet, falls festgelegt.

Also, wenn Sie setzen minHeight das gleiche wie die Symbolleiste Höhe Attribut (layout_height), wird der Pfeil zurück vertikal zentriert werden.

+3

Danke für eine kurze und intelligente Antwort –

+1

Ich war mit einem benutzerdefinierten 'Toolbar: Thema' so mein Problem wurde gelöst, indem Sie' @ android:/abc_action_bar_stacked_max_height 'von meinem' Werkzeugleisten-Theme' –

+0

Wenn Unterstützung v7 vor 24 verwendet wird, können wir 'maxButtonHeight' gleich' android: minHeight 'setzen einen vertikalen Center-Effekt. Nach Version v7> = 24 + können wir attr 'buttonGravity' einstellen. – act262

1

Die beste Methode, dies zu erreichen, ist das Entfernen der regulären Zurück-Schaltfläche aus der Symbolleiste und das Hinzufügen eines benutzerdefinierten ImageButtons in Ihrem XML-Layout und das Festlegen des Images. Sie können diesen ImageButton überall in der Werkzeugleiste platzieren.

Ihr Aktivitätslayout-Code sollte in etwa so aussehen.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <include 
     android:id="@+id/toolbar" 
     layout="@layout/toolbar" /> 

    <ImageButton 
     android:layout_width="60dp" 
     android:layout_height="60dp" 
     android:id="@+id/button" 
     android:src="@drawable/attach_icon" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 
2

Innen ActionBarActivity

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBat().setTitle("Hello World"); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    getSupportActionBar().setHomeButtonEnabled(true); 

Layout-Code:

<android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="@color/primary" 
     app:theme="@style/ToolbarTheme" 
     app:popupTheme="@style/Theme.AppCompat"/> 

und Stil:

<style name="AppTheme.Base" parent="Theme.AppCompat.Light"> 
    <item name="colorPrimary">@color/primary</item> 
    <item name="colorPrimaryDark">@color/primaryDark</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowActionBar">false</item> 
    <item name="windowActionBar">false</item> 
</style> 

<style name="AppTheme" parent="AppTheme.Base"> 

dass Symbolleiste Denken Sie daran, nur Viewgroup, so u es in jedem Stil können wie du magst. Hier ist Bildlink: Toolbar sample

Ich hoffe, es hilft.

0

weg von @Rick Sanchez answer Huckepack - wenn Sie die Größe der Toolbar wissen minHeight Attribut können Sie dann verwenden:

android:gravity="top" 
app:titleMarginTop="@dimen/margin_to_center" 

in der Symbolleiste den Text zu zentrieren. Wenn Sie android:minHeight="?actionBarSize" verwenden, dann wäre dies etwa 13p

0

Für mich funktionierte keine der Lösungen. In meinem Fall ist das Problem der Marge war ich angewandt:

<android.support.v7.widget.Toolbar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    ... > 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginBottom="10dp" 
     android:layout_marginTop="10dp" /> 

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

Nachdem es in die Symbolleiste Anwendung direkt wurde die Taste vertikal zentriert:

<android.support.v7.widget.Toolbar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginBottom="10dp" 
    android:layout_marginTop="10dp" 
    ... > 

    <View 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

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

@Rick Sanchez Antwort ist Arbeit, Setup-Toolbar layout_height die gleiche wie minHeight

ich in Toolbar Konstruktor gefunden kann ein Feld Setup-Taste Schwerkraft haben, mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

, aber v7 unterstützt Toolbar kann nicht eingerichtet werden, mButtonGravity = Gravity.TOP;

Verwandte Themen