我尝试了几种不同的方法,包括在这里找到的一种方法(这反过来又使我尝试了该问题的两个重要答案),以及使用反射来访问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; } } }
最终弄清楚了,这是因为,据我了解,设置选框的TextView必须先选择,然后才能真正开始选框。我更新了我在问题中发布的MarqueeToolbar类,可以在以下要点中找到它:https ://gist.github.com/InsanityOnABun/95c0757f2f527cc50e39