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