1

Я пытаюсь изменить название пользовательского ActionBar динамически, когда некоторые вещи происходят в основной части представления. И хотя я был в состоянии сначала установить заголовок правильно, используя следующий код ...Как динамически менять собственный заголовок ActionBar?

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 
getSupportActionBar().setCustomView(R.layout.activity_scanning_title); 

Я не могу показаться, чтобы получить доступ к нужному объекту из ActionBar, чтобы изменить его в случае необходимости. Поскольку интуитивный вариант был getCustomView(), я получил, насколько:

ActionBar bar = getSupportActionBar(); 
android.view.View v = bar.getCustomView(); 
if (v instanceof android.widget.LinearLayout) 
{ 
    LinearLayout layt = (LinearLayout)v; 
    // ??? 
    . . . 
} 

и получается, что getCustomView() действительно возвращает LinearLayout, но я не могу получить в TextView, который является частью макета, который правильно отображал исходный заголовок, мне только нужно его изменить.

XML-за LinearLayout, который определяет мое собственное название здесь:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:layout_gravity="center" 
android:orientation="vertical"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:text="Scan Assessment" 
    android:textColor="#ffffff" 
    android:textSize="18sp" /> 
</LinearLayout> 

ответ

1

Дайте TextView идентификатор:

<TextView 
    android:id="@+id/title" 
    ... /> 

вызов findViewById() на обычае View получить:

TextView title = (TextView) bar.getCustomView().findViewById(R.id.title); 

И используйте setText() м это изменить название:

title.setText("New title"); 
+0

Это действительно правильный ответ. И очень тщательный. Работал как чемпион. – Alyoshak