Intereting Posts

Настройка многоканального субтитров SupportActionBar

У меня есть следующая настройка:

<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"/> 

а также

 <style name="TitleTextStyle"> <item name="android:maxLines">2</item> <item name="android:textAllCaps">false</item> </style> 

а также

 getSupportActionBar().setSubtitle( targetString ); 

@textAllCaps , но @maxLines игнорируется (я также пробовал @minLines).

Как включить многострочный текст в субтитрах?

ТИА

ОБНОВИТЬ:

Я добавил код в 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 ); } } 

Проблема в том, что применяются значения эллипсиса, но setMaxLines() игнорируется …

UPD2:

setSingleLine( false ) сделал трюк.

Solutions Collecting From Web of "Настройка многоканального субтитров SupportActionBar"

К сожалению, maxLines не является частью TextAppearance поэтому его изменение не повлияет на внешний вид субтитров. Кроме того, нет законного способа доступа к Toolbar.mSubtitleTextView , но после установки текста субтитров вы можете получить к нему доступ через отражение и изменить его внешний вид по своему усмотрению.

ОБНОВЛЕНИЕ :

Вот как вы можете получить доступ к mSubtitleTextView через отражение.

 public class SubtitleAccessor { private static final Field sSubtitleTextViewField = getSubtitleTextViewField(); private static Field getSubtitleTextViewField() { try { Field field = Toolbar.class.getDeclaredField("mSubtitleTextView"); field.setAccessible(true); return field; } catch (NoSuchFieldException exception) { return null; } } public static TextView getSubtitleTextView(Toolbar toolbar) { if (sSubtitleTextViewField == null) { return null; } try { return (TextView) sSubtitleTextViewField.get(toolbar); } catch (IllegalAccessException exception) { return null; } } } 

Попробуйте добавить:

 <item name="android:singleLine">false</item> 

Если это не сработает, вы можете попробовать использовать нестандартное представление:

 ActionBar actionBar = getActionBar(); actionBar.setDisplayShowCustomEnabled(true); actionBar.setCustomView(R.layout.your_layout_file); 

Где R.layout.your_layout_file – это ваш собственный макет, разработанный так, как вам хочется.

Чтобы использовать панель инструментов и Appcompat 21 , вам необходимо использовать ActionBarActivity и использовать:

 ((ActionBarActivity) getActivity()).getSupportActionBar().setSubtitle("About");