21

Sto riscontrando un problema nel tentativo di centrare il pulsante Indietro sulla barra degli strumenti di supporto. Lo sto usando all'interno di ActionBarActivity.Come centrare il pulsante indietro della barra degli strumenti?

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

e impostare la navigazione all'interno del Attività di onCreate() come questo:

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

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

Tuttavia, quello che sto ricevendo è questa: not centered back button screenshot Come si può vedere il pulsante Indietro è fuori luogo

Modifica: Il problema sembra essere in un valore personalizzato per ?attr/actionBarSize impostato su 40dp, tuttavia, risulta ora che è il titolo che è mispla ced invece.

+0

Una delle azioni che penso disabiliti quel pulsante indietro e metti un pulsante widget all'interno e allineo come vuoi. Spero che sia d'aiuto!!! –

+0

puoi rimuovere il tag minHeight e aggiungere altezza come "? Attr/actionBarSize" invece di "wrap_content" –

+0

@Viren Vorrei evitare di riscoprire la ruota se possibile – mewa

risposta

53

Dal developer.android.com:

Toolbar supporta una funzione più mirata set di ActionBar. Dall'inizio alla fine, una barra degli strumenti può contenere una combinazione dei seguenti elementi opzionali :

Un pulsante di navigazione. Questa può essere una freccia su, il menu di navigazione può essere attivato, chiudi, chiudi, fatto o un altro glifo scelto dall'app. Questo pulsante deve sempre essere utilizzato per accedere ad altre destinazioni di navigazione all'interno del contenitore della barra degli strumenti e il relativo contenuto indicato o altrimenti lasciare il contesto corrente indicato dalla barra degli strumenti. Il pulsante di spostamento è allineato verticalmente con l'altezza minima della barra degli strumenti, se impostata.

Quindi, se si imposta MinHeight attribuire lo stesso come l'altezza della barra degli strumenti (layout_height), la freccia indietro sarà centrato in verticale.

+3

Grazie per una risposta breve e intelligente –

+1

Stavo usando una 'barra degli strumenti personalizzata: theme' quindi il mio problema è stato risolto rimuovendo' @ android:/abc_action_bar_stacked_max_height 'dal tema' della mia barra degli strumenti ' –

+0

Se si utilizza il supporto v7 prima di 24, possiamo impostare' maxButtonHeight' uguale a 'android: minHeight' crea un effetto center verticale. Dopo la versione v7> = 24 +, possiamo impostare attr' buttonGravity'. – act262

1

Il modo migliore per ottenere ciò è rimuovere il normale pulsante Indietro dalla barra degli strumenti e aggiungere un ImageButton personalizzato nel layout XML e impostare l'immagine su di esso. Puoi posizionare ImageButtton dove vuoi sulla barra degli strumenti.

Il codice di layout dell'attività dovrebbe essere simile al seguente.

<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

All'interno ActionBarActivity

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

codice Disposizione:

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

e stile:

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

Ricordate che barra degli strumenti è solo viewgroup, in modo da u può lo stile in qualsiasi come ti piace Ecco il collegamento immagine: Toolbar sample

Spero che sia d'aiuto.

0

Piggybacking off di @Rick Sanchez answer - se si conosce la dimensione della barra degli strumenti del minHeight attributo è possibile utilizzare:

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

nella barra degli strumenti per centrare il testo. Se si utilizza android:minHeight="?actionBarSize", questo sarebbe circa 13p

0

Per me, nessuna delle soluzioni ha funzionato. Nel mio caso il problema era il margine ho applicato:

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

Dopo l'applicazione alla barra degli strumenti direttamente, il pulsante è stato centrato in verticale:

<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 risposta è il lavoro, l'installazione Toolbar layout_height la stessa minHeight

ho trovato nel costruttore Toolbar hanno un campo può pulsante di messa a punto di gravità, mButtonGravity = a.getInteger(R.styleable.Toolbar_buttonGravity, Gravity.TOP);

, ma la barra degli strumenti di supporto v7 non può essere configurata, mButtonGravity = Gravity.TOP;

Problemi correlati