22

Con la nuova API Lollipop, dobbiamo utilizzare una barra degli strumenti se vogliamo personalizzare l'aspetto della barra delle azioni.Come posso posizionare una barra di avanzamento a destra della barra degli strumenti?

L'aggiunta di una barra di avanzamento alla barra degli strumenti è semplice come aggiungerla a Toolbar ViewGroup, as Chris Banes said.

<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="wrap_content" 
    android:background="@color/material_green_500" 
    android:minHeight="?attr/actionBarSize" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

    <!-- Color is Brown 500 --> 
    <ProgressBar 
     android:id="@+id/toolbar_progress_bar" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:indeterminateTint="#795548" 
     android:indeterminateTintMode="src_in"/> 

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

Ma come possiamo posizionarlo alla destra della barra degli strumenti, a cui appartiene?

L'attributo layout_gravity sembra non essere definito per la barra degli strumenti. Impostarlo dal xml non ha alcun effetto. Ho provato a cambiare la larghezza del ProgressBar, senza successo.

Cosa devo fare?

EDIT: C'è una soluzione programmatica a questo problema, vedere @mdelolmo rispondere per quello.

+4

layout_gravity sta lavorando bene in appcompat 21.0.2 – Philio

+0

Impressionante! Dovresti fare una risposta. – doplumi

+0

Ho trovato questa pagina quando ho lo stesso problema come te. layout_gravity è davvero la risposta. Il mio problema e probabilmente il tuo è che le affermazioni di autocomplete di Android Studio non prevedono layout_gravity, ma se la scrivi semplicemente tu la trovi. – Gober

risposta

14

ho anche colpito la stessa parete, ma a livello di codice funziona:

Toolbar.LayoutParams layoutParams = new Toolbar.LayoutParams(
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      ViewGroup.LayoutParams.WRAP_CONTENT, 
      Gravity.TOP | Gravity.RIGHT); 

Nel mio frammento, ho allinearlo verso l'alto, in modo che corrisponda l'allineamento del menu.

+1

Ho già provato a livello di codice e sì, funziona. Il problema è la dichiarazione XML. Ha fatto +1 perché era qualcosa che vale la pena menzionare, grazie! – doplumi

-5

Una soluzione alternativa per creare il layout completamente in xml sostituisce il contenuto della barra degli strumenti con il proprio layout relativo. Per farlo, devi falsificare il titolo dell'attività (e anche l'icona di navigazione se ne stai utilizzando uno), che letteralmente annidano quanto segue nel tuo blocco barra degli strumenti.

<RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="@dimen/toolbar_height" 
     android:paddingRight="2dp" > 

     <TextView 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentLeft="true" 
      android:layout_centerVertical="true" 
      android:text="@string/app_name" 
      android:textColor="@android:color/white" 
      android:textSize="20sp" 
      android:fontFamily="sans-serif-medium" /> 

     <ProgressBar 
      android:id="@+id/toolbar_progress_bar" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:indeterminateTint="#795548" 
      android:indeterminateTintMode="src_in" /> 

</RelativeLayout> 

noti che 20SP sans-serif-medium è il carattere utilizzato nella barra degli strumenti di lecca-lecca, potrebbe essere necessario regolare i parametri di visualizzazione del testo per farlo sembrare naturale nelle versioni precedenti.

33

Puoi provare questo. Ha funzionato per me. Chiave qui è quello di definire layout_gravity nel xml: android:layout_gravity="right"

<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="wrap_content" 
android:background="@color/material_green_500" 
android:minHeight="?attr/actionBarSize" 
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> 

<!-- Color is Brown 500 --> 
<ProgressBar 
    android:id="@+id/toolbar_progress_bar" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:indeterminateTint="#795548" 
    android:indeterminateTintMode="src_in" 
    android:layout_gravity="right" 
/> 

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

Preferisco usare 'layout_gravity =" end "' per la compatibilità da destra a sinistra. Tuttavia, questo avviso è disponibile solo dall'API 17. – bryant1410

Problemi correlati