1

我需要开发一个可以动态更改操作栏标题样式的应用程序。

In 尝试通过以下方式访问操作栏标题来实现此目的:

(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 标题。

4

1 回答 1

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

于 2017-05-29T03:10:17.863 回答