Ho la seguente configurazione:Impostazione SupportActionBar sottotitolo multilinea
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:subtitleTextAppearance="@style/TitleTextStyle"
app:theme="@style/ActionBarStyle.Light"/>
e
<style name="TitleTextStyle">
<item name="android:maxLines">2</item>
<item name="android:textAllCaps">false</item>
</style>
e
getSupportActionBar().setSubtitle(targetString);
il @textAllCaps
viene applicato, ma @maxLines
viene ignorato (ho provato anche ` @minLines).
Come abilitare il testo multilinea nei sottotitoli?
TIA
UPDATE:
ho aggiunto il codice nel onStart
:
@Override
public void onStart() {
super.onStart();
try{
Field field = Toolbar.class.getDeclaredField("mSubtitleTextView");
field.setAccessible(true);
subtitleTextView = (TextView)field.get(toolbar);
subtitleTextView.setSingleLine(false);
subtitleTextView.setMaxLines(2);
subtitleTextView.setEllipsize(TruncateAt.END);
}catch(Exception e) {
Logg.e(this, "", e);
}
}
il problema è ora, che i valori ellipsize vengono applicati, ma setMaxLines()
chiamata viene ignorata ...
UPD2:
setSingleLine(false)
ha fatto il trucco.
in realtà voglio impostare il testo solo a livello di programmazione, quindi riflessione o simili farebbero – injecteer
in che modo posso accedere al 'textView' del sottotitolo tramite riflessione? quale sarebbe l'id di esso? – injecteer
@injecteer Ho aggiunto un esempio di codice alla risposta. Non puoi trovare 'mSubtitleTextView' da id perché è stato creato in fase di runtime e non ha ID. Quindi, la cosa migliore che puoi fare oltre a ripensare la tua interfaccia utente, o scrivere la tua classe 'Toolbar', o usare una vista personalizzata invece del titolo e del sottotitolo è accedere direttamente ai campi privati di' Toolbar' tramite riflessione. – Michael