Ho provato setExpandTitleTextAppearance
, ma non ha funzionato. Voglio centrare il testo del titolo esteso.Come centrare il titolo di un CollapsingToolbarLayout?
risposta
@avvia, correggimi se sbaglio, vuoi avere il titolo centrato nella barra degli strumenti, quindi CollapsingToolbarLayout è compresso e il tuo layout è qualcosa del genere, giusto?
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginStart="48dp"
app:expandedTitleMarginEnd="64dp"
android:fitsSystemWindows="true">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scaleType="centerCrop"
android:fitsSystemWindows="true"
app:layout_collapseMode="parallax"/>
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
app:layout_collapseMode="pin" />
</android.support.design.widget.CollapsingToolbarLayout>
allora si può fare questo trucco (lo faccio in onCreate del Attività):
try {
Field declaredField = toolbar.getClass().getDeclaredField("mTitleTextView");
declaredField.setAccessible(true);
TextView titleTextView = (TextView) declaredField.get(toolbar);
ViewGroup.LayoutParams layoutParams = titleTextView.getLayoutParams();
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
titleTextView.setLayoutParams(layoutParams);
titleTextView.setGravity(Gravity.CENTER_HORIZONTAL);
} catch (Exception e) {
//"Error!"
}
La chiave è che TextView entro Toolbar ha proprietà width "Wrap Contenuto", quindi abbiamo bisogno di cambiarlo in "Abbina genitore". (Vedi di più su questa riflessione here)
Testato su Android 5.1.1 e Android 4.3 (dovrebbe funzionare praticamente ovunque)
Mi capita di lavorare sullo stesso problema. Centrare un titolo personalizzato 'TextView' in una' Barra degli strumenti 'sembra che dovrebbe funzionare, ma per qualche ragione 'layout_gravity =" center "' non centra il testo in questo scenario. Il testo di 'TextView' viene invece allineato a destra. Potenzialmente un bug. – Ryan
@Ryan ottima cattura, lo adoro! Risolto il problema con la mia risposta e testato su Android 5.1.1 e Android 4.3. Grazie per l'avviso! –
la tua risposta aggiornata sembra funzionare correttamente, ma odio dover ricorrere all'utilizzo del reflection. Peccato che non ci sia un approccio più snello a questo problema. – Ryan
C'è un attributo expandedTitleGravity
che è possibile utilizzare con il CollapsingToolbarLayout per centrare il titolo esteso testo. Aggiungi questo al vostro CollapsingToolbarLayout:
app:expandedTitleGravity="bottom|center_horizontal"
Risposta perfetta :) –
risposta intelligente :) –
Nel mio caso d'uso, ho impostato app:titleEnabled
su false, non avevo bisogno comunque. Successivamente, la mia gravità è stata rispettata correttamente all'interno del layout della barra degli strumenti.
Volevo la mia barra degli strumenti personalizzata per mostrare il titolo al centro. impostando questa proprietà in CollapsingToolbarLayout mi ha aiutato con il mio requisito. Grazie mille. – Jigar
buono e semplice. –
Come già detto Nguyễn Hoàng Anh, impostare app:titleEnabled
su falso lavorato come un incantesimo.
Con questa opzione abilitata, dopo alcuni scavi con l'ispettore di layout, la vista senza nome sospetta viene sempre aggiunta davanti a TextView
all'interno di Toolbar
, subito dopo il pulsante "Su" (se abilitato).
Quindi, anche se la gravità del layout funziona correttamente, alcune viste sospette occupano tutti gli spazi aggiuntivi all'interno dello Toolbar
.
Nel caso in cui si sta tentando di centrare il documento nella stato compresso è possibile utilizzare
android:paddingEnd="70dp"
android:paddingRight="70dp"
come questo:
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingEnd="70dp"
android:paddingRight="70dp"
app:collapsedTitleGravity="center_horizontal"
app:expandedTitleGravity="start"
app:layout_scrollFlags="scroll|exitUntilCollapsed">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin">
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CollapsingToolbarLayout>
ci mostrano quello che hai provato già, è più facile 'aiuto 'in quel modo –