设置SupportActionBar字幕多行

时间:2015-07-20 11:04:04

标签: android android-actionbar android-appcompat multiline subtitle

我有以下设置:

<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)。

如何在字幕中启用多行文字?

TIA

更新:

我将代码添加到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 );
    }
}

现在的问题是,应用了ellipsize值,但忽略了setMaxLines()调用......

UPD2:

setSingleLine( false )成功了。

3 个答案:

答案 0 :(得分:4)

不幸的是,maxLines不是TextAppearance的一部分,因此更改它不会影响字幕外观。此外,没有 legal 方式来访问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;
        }
    }
}

答案 1 :(得分:0)

请尝试添加:

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

如果它不起作用,您可以尝试使用自定义视图:

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

R.layout.your_layout_file是您自定义布局的设计方式。

答案 2 :(得分:-1)

要使用工具栏和 Appcompat 21 ,您必须使用ActionBarActivity并使用:

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