我需要开发一个应用程序,可以动态更改操作栏标题样式。
尝试通过以下方式访问操作栏标题来实现此目的:
(TextView) findViewById(
Resources.getSystem().getIdentifier(
"action_bar_title",
"id",
"android"
)
);
然后我像普通的TextView一样编辑样式。
在移动电话改变方向之前,这似乎工作正常。
在方向改变之后,我仍然可以通过上面的代码得到TextView(即不返回null),但不再反映对textview的更改。
有人知道为什么吗?
=============================================== ===============
感谢您的快速回复,我用来修改TextView的代码:
@Override
public void onConfigurationChanged( Configuration newConfig )
{
super.onConfigurationChanged( newConfig );
int titleId = Resources.getSystem().getIdentifier( "action_bar_title", "id", "android" );
TextView title = (TextView) activity.findViewById( titleId );
title.setTextColor( Color.parseColor("#ff0000") );
title.setBackgroundColor( Color.parseColor("#00ff00") );
title.setText( ""+ new Random().nextInt(9999) );
}
更改方向后,将触发onConfigurationChanged方法。 但是,不再反映操作栏标题TextView。
我也可以使用titleView.getText()。toString()来获取我之前指定的正确文本。
但是,操作栏标题没有任何可见的更改。 我觉得我提取的TextView不是Action Bar标题。
答案 0 :(得分:0)
更改方向后,应用程序资源刷新,指针将丢失到新标题TextView。
因此,破解textview以改变其风格和内容并不是一个好方法。使用android.text.SpannableString可以做同样的效果,但在方向后保持样式。
SpannableString titleSpan = new SpannableString(getString(R.string.app_name));
titleSpan.setSpan(new TypefaceSpan(this, titleTypeface), 0, titleSpan.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(titleSpan);
参考:https://developer.android.com/reference/android/text/SpannableString.html