gpt4 book ai didi

java - 使用 Lollipop SDK 在 Android 中的工具栏/ActionBar 中选取标题?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:11:13 26 4
gpt4 key购买 nike

我尝试了几种不同的方法,包括找到的一种 here (这反过来让我尝试了 this 问题的两个最佳答案),以及使用反射来访问 TextView 并设置相关方法。两次尝试都失败了,前者导致根本没有文本设置为标题(我将文本设置为正确的 textview 元素),后者设置文本并删除椭圆,但根本没有选取框。下面是我的反射(reflection)尝试。

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;
}
}
}

最佳答案

Toolbar类中声明的TextView字段名和工具栏的Marquee标题中获取标题TextView对象。

    TextView titleTextView = null;

try {
Field f = toolbar.getClass().getDeclaredField("mTitleTextView");
f.setAccessible(true);
titleTextView = (TextView) f.get(toolbar);

titleTextView.setEllipsize(TruncateAt.MARQUEE);
titleTextView.setFocusable(true);
titleTextView.setFocusableInTouchMode(true);
titleTextView.requestFocus();
titleTextView.setSingleLine(true);
titleTextView.setSelected(true);
titleTextView.setMarqueeRepeatLimit(-1);

} catch (NoSuchFieldException e) {
} catch (IllegalAccessException e) {
}

关于java - 使用 Lollipop SDK 在 Android 中的工具栏/ActionBar 中选取标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097126/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com