8

Desidero avere una barra di azione a doppia altezza (come negli esempi di linee guida materiali), ma con (eventualmente) 2 righe di testo nel titolo. Il titolo che sto utilizzando è dinamico e dipende dall'elemento visualizzato nella pagina. Se c'è una riga dovrebbe apparire come una normale barra di azione, se ci sono 2 righe, il testo dovrebbe rompersi e cadere su una nuova riga. I pulsanti di azione dovrebbero rimanere allineati con la riga superiore del testo, indipendentemente dal fatto che siano presenti una o due righe.Barra degli strumenti Android con due righe nel titolo?

Ho letto che il Toolbar è il nuovo modo dinamico di fare barre di azione quindi ho pensato che sarebbe probabilmente la strada da percorrere (so che ci sono delle risposte là fuori che consentono di ignorare la vecchia textview del titolo della barra delle azioni per renderlo 2 linee, ma non sembra quello che sto andando per entrambi). Sto usando Android 4.4+ quindi ho bisogno di utilizzare la libreria v7 appcompat per la barra degli strumenti.

Ho trovato guardando il codice che il titolo textview è vincolato a una sola riga (https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/appcompat/src/android/support/v7/widget/Toolbar.java - contiene il codice mTitleTextView.setSingleLine();).

Poi ho pensato che dal momento che c'è un sottotitolo a riga singola sotto, e possiamo cambiare il formato di quel testo, potrei formattarlo come il testo del titolo e solo mettere il mio titolo in due parti, se necessario. Ho scritto un codice di base per dividere la stringa, ma mi è servito per capire se avevo bisogno di dividerlo - e in pratica ho trovato che toolbar.isTitleTruncated() restituisce sempre false (sia dal mio oggetto toolbar accessibile direttamente, sia da getSupportActionBar().isTitleTruncated()).

ho cercato la risposta here per avvolgere una TextView all'interno del Toolbar, ma non può ottenere il TextView per allinearsi con i pulsanti di azione della barra degli strumenti quando faccio questo. Se lo allineo correttamente per una singola riga (usando il padding superiore), allora è sbagliato per una doppia linea e viceversa. Qui è il mio codice:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:id="@+id/view_content" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 

<fragment 
    android:id="@+id/fragment_pager" 
    android:name="com.example.ProductPagerFragment" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<android.support.v7.widget.Toolbar 
    android:id="@+id/product_details_toolbar" 
    style="@style/style.toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="@dimen/double_height_toolbar" 
    android:minHeight="?attr/actionBarSize" 
    android:gravity="top" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" > 

    <TextView 
     android:id="@+id/product_details_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="top" 
     android:paddingTop="@dimen/padding_normal" 
     style="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse" 
     android:maxLines="2" /> 

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

Qualcuno ha qualche idea? È davvero così contro le linee guida Android che dovrebbe essere così difficile?

Aggiornamento: l'aggiunta di immagini a scopo dimostrativo:

come dovrebbe apparire:

How it should look

come appare ora:

How it does look

+0

ho creato https://code.google.com/p/android/issues/detail? id = 81987 per il problema di isTitleTruncated() non funziona. – gkee

risposta

4

Hmmm, tutto funziona bene per me.

Screenshot

<android.support.v7.widget.Toolbar 
     android:layout_height="200dp" 
     android:layout_width="match_parent" 
     android:minHeight="?attr/actionBarSize" 
     android:gravity="top" 
     android:background="?attr/colorPrimaryDark" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light"> 

    <TextView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:text="Title" 
      android:textAppearance="@style/TextAppearance.AppCompat.Widget.ActionBar.Title.Inverse"/> 

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

Funziona bene per me se ho una riga di testo. Se ne ho due, allora l'allineamento diventa tutto incasinato. Provalo con un titolo più lungo. – gkee

+0

Non utilizzare toolbar.setTitle() con questa soluzione. Ottieni il TextView all'interno della vista Toolbar e imposta il suo testo in modo programmatico. – Erdi

Problemi correlati