【发布时间】:2015-01-21 17:02:30
【问题描述】:
我尝试了几种不同的方法,包括找到here 的方法(这反过来又让我尝试了this 问题的两个最佳答案),以及使用反射来访问 TextView 和设置相关方法。两次尝试都失败了,前者导致根本没有将文本设置为标题(我将文本设置为正确的 textview 元素),后者设置了文本并删除了椭圆,但根本没有选框。下面是我的反思尝试。
import android.content.Context;
import android.support.v7.widget.Toolbar;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;
import android.widget.Toast;
import java.lang.reflect.Field;
public class MarqueeToolbar extends Toolbar {
public MarqueeToolbar(Context context) {
super(context);
}
public MarqueeToolbar(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MarqueeToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setTitle(CharSequence title) {
if (!reflected) {
reflected = reflectTitle();
}
super.setTitle(title);
}
@Override
public void setTitle(int resId) {
if (!reflected) {
reflected = reflectTitle();
}
super.setTitle(resId);
}
boolean reflected = false;
private boolean reflectTitle() {
try {
Field field = Toolbar.class.getDeclaredField("mTitleTextView");
field.setAccessible(true);
TextView titleView = (TextView) field.get(this);
titleView.setEllipsize(TextUtils.TruncateAt.MARQUEE);
titleView.setMarqueeRepeatLimit(-1);
return true;
} catch (NoSuchFieldException e) {
e.printStackTrace();
return false;
} catch (IllegalAccessException e) {
e.printStackTrace();
return false;
} catch (NullPointerException e) {
e.printStackTrace();
return false;
}
}
}
【问题讨论】:
标签: java android android-actionbar android-5.0-lollipop android-toolbar