1

Мне нужно разработать приложение, в котором можно динамически менять стиль заголовка панели действий.Невозможно редактировать заголовок панели действий после ориентации

В пытались добиться этого путем доступа к экшен бар следующим образом:

(TextView) findViewById( 
      Resources.getSystem().getIdentifier(
               "action_bar_title", 
               "id", 
               "android" 
               ) 
         ); 

я изменить стиль так же, как нормальный TextView.

Это похоже на работу, прежде чем мобильный телефон изменит ориентацию.

После изменения ориентации, однако, я все еще могу получить TextView (т. Е. Не вернуть null) указанным выше кодом, но изменения в текстовом виде больше не отражаются.

Возможно, кто-нибудь знает почему?

================================================================================================================================== ================

Спасибо за быстрый ответ, код я использовал для изменения 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 i не является заголовком Action Bar.

+0

Рассмотрим также добавить код, используемый для изменения TextView ... – Kris

ответ

0

После того, как ориентация изменилась, ресурсы приложения обновились, указатель потеряет свой путь к новому заголовку 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