1

我需要开发一个应用程序,可以动态更改动作栏标题样式。定位后无法编辑动作栏标题

在试图通过下列方式访问操作栏标题来实现这一目标:

(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不是操作栏标题。

+0

考虑也加入用于修改TextView的代码... – Kris 2014-09-03 15:37:08

回答

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