小编典典

带有Lollipop SDK的Android中的工具栏/ ActionBar中的字幕标题?

java

我尝试了几种不同的方法,包括在这里找到的一种方法(这反过来又使我尝试了问题的两个重要答案),以及使用反射来访问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;
        }
    }
}

阅读 212

收藏
2020-11-16

共1个答案

小编典典

最终弄清楚了,这是因为,据我了解,设置选框的TextView必须先选择,然后才能真正开始选框。我更新了我在问题中发布的MarqueeToolbar类,可以在以下要点中找到它:https
://gist.github.com/InsanityOnABun/95c0757f2f527cc50e39

2020-11-16