我有以下设置:设置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)。
如何在字幕中启用多行文字?
TIA
UPDATE:
我添加的代码到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)
诀窍。
实际上我只想以编程方式设置文本,所以反射或类似将会这样做 – injecteer
如何通过反射访问字幕的“textView”?它会是什么ID? – injecteer
@injecteer我在答案中添加了一个代码示例。您无法通过id找到'mSubtitleTextView',因为它是在运行时创建的,并没有id。因此,除了重新考虑UI或编写自己的“Toolbar”类,或使用自定义视图而不是标题和副标题外,最好的方法是通过反射直接访问“工具栏”的专用字段。 – Michael