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:
come appare ora:
ho creato https://code.google.com/p/android/issues/detail? id = 81987 per il problema di isTitleTruncated() non funziona. – gkee