方向后无法编辑操作栏标题

时间:2014-09-03 15:21:36

标签: android orientation android-actionbar-compat onconfigurationchanged

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

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

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

1 个答案:

答案 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