В панели инструментов приложения android.метод setTitle не имеет эффекта - имя приложения отображается как заголовок

Я пытаюсь создать простое приложение с помощью библиотеки android-support-v7:21.

Фрагмент кода:
В MainActivity.java

public class MainActivity extends ActionBarActivity {

    Toolbar mActionBarToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
        mActionBarToolbar.setTitle("My title");
        setSupportActionBar(mActionBarToolbar);
}

activity_main.в XML

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar            
        android:id="@+id/toolbar_actionbar"
        android:background="@null"
        android:layout_width="match_parent"
        android:layout_height="?actionBarSize"
        android:fitsSystemWindows="true" />

</LinearLayout>

но вместо "мой заголовок" на панели инструментов отображается %имя приложения%.
Кажется setTitle метод не имеет никакого эффекта.
Я хотел бы показать "мой титул".

UPD: Прежде чем, styles.xml было:

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
</style>

Итак, я думал, что actionbar не используется. Я добавляю NoActionBar стиль родителя:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
</style>

но проблема не устранена.

любая помощь очень ценится.

23 ответов


нашел решение:
Вместо:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
mActionBarToolbar.setTitle("My title");
setSupportActionBar(mActionBarToolbar);

Я использую:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My title");

и это работает.


для всех, кому нужно настроить заголовок на панели инструментов некоторое время после установки SupportActionBar, прочитайте это.

внутренняя реализация библиотеки поддержки просто проверяет, имеет ли панель инструментов заголовок (не null) в момент настройки SupportActionBar. Если есть, то этот заголовок будет использоваться вместо заголовка окна. Затем вы можете установить фиктивный заголовок во время загрузки реального заголовка.

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("");
setSupportActionBar(mActionBarToolbar);

позже...

mActionBarToolbar.setTitle(title);

приведенный выше ответ полностью верен, но не работает для меня.

я решил свою проблему со следующими вещами.

на самом деле мой XML таков:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/confirm_order_mail_layout"
    android:layout_width="match_parent"
    android:layout_height="fill_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/confirm_order_appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/confirm_order_list_collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:expandedTitleMarginEnd="64dp"
            app:expandedTitleMarginStart="48dp"
            app:layout_scrollFlags="scroll|enterAlways">

            <android.support.v7.widget.Toolbar
                android:id="@+id/confirm_order_toolbar_layout"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                app:layout_scrollFlags="scroll|enterAlways"
                app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

Я пробовал все варианты, и в конце концов я просто удалил CollapsingToolbarLayout из-за меня не нужно использовать в этом конкретном XML Мой окончательный XML как:

<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/confirm_order_mail_layout"
    android:layout_width="match_parent"
    android:layout_height="fill_parent">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/confirm_order_appbar_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.v7.widget.Toolbar
            android:id="@+id/confirm_order_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

        </android.support.v7.widget.Toolbar>
    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

теперь вы должны использовать setTitle() как выше ответ:

mActionBarToolbar = (Toolbar) findViewById(R.id.confirm_order_toolbar_layout);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My Title");

теперь, если вы хотите использовать CollapsingToolbarLayout и Toolbar вместе, то вы должны использовать setTitle() of CollapsingToolbarLayout

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.confirm_order_mail_layout);
collapsingToolbarLayout.setTitle("My Title");

пусть это поможет вам. Спасибо.


попробуйте это, вы можете определить заголовок непосредственно в XML:

 <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:title="some title"
        app:popupTheme="@style/AppTheme.PopupOverlay">

просто вы можете изменить любое имя acitivity, используя

Acitivityname.this.setTitle("Title NAme");

чтобы установить заголовок для каждого заголовка фрагмента Navbar

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    myView = inflater.inflate(R.layout.second_layout, container, false);
    getActivity().setTitle("title");

    return myView;
}

попробуйте это .. этот метод работает для меня..!! надеюсь, это кому-то поможет..!!

<android.support.v7.widget.Toolbar  
 xmlns:app="http://schemas.android.com/apk/res-auto"  
 android:id="@+id/my_awesome_toolbar"  
 android:layout_width="match_parent"  
 android:layout_height="wrap_content"  
 android:background="?attr/colorPrimary"  
 android:minHeight="?attr/actionBarSize"  
 app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" >  

<TextView  
   android:id="@+id/toolbar_title"  
   android:layout_width="wrap_content"  
   android:layout_height="wrap_content"  
   android:gravity="center"  
   android:singleLine="true"  
   android:text="Toolbar Title"  
   android:textColor="@android:color/white"  
   android:textSize="18sp"  
   android:textStyle="bold" />  

</android.support.v7.widget.Toolbar>  

чтобы отобразить логотип на панели инструментов, попробуйте следующий фрагмент. // Установить drawable

toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));

Дайте мне знать результат.


пожалуйста, смотрите https://code.google.com/p/android/issues/detail?id=77763. Очевидно, так и должно быть. Как только вы позвоните setSupportActionBar() вызов метода, затем ответственность делегата ActionBar за маршрутизацию вызова в правильное представление.


 getSupportActionBar().setTitle("Your Title");

Я попытался переименовать панель инструментов из фрагмента

это помогло мне, я надеюсь помочь кому-то еще

Activity activity = this.getActivity();
Toolbar toolbar = (Toolbar) activity.findViewById(R.id.detail_toolbar);
        if (toolbar != null) {
            activity.setTitle("Title");
        }

//toolbar.setTitle("Title"); did not give the same results

скриншот: enter image description here


просто используйте это в своем адаптере, Где MainActivity-это ваша AppCompactActivity. Звони откуда угодно.

((MainActivity) context).getSupportActionBar().setTitle(titles.get(position));

Я заставил его работать с помощью -

toolbar.post(new Runnable() {
            @Override
            public void run() {
                toolbar.setTitle("My Title");
            }
        });

дело не только в .setTitle

дополнительные методы панели инструментов поддержки (Appcompat v7) в onCreate работает только с

getSupportActionBar().method()

и не работает с mToolbar.method()

примеры:

getSupportActionBar().setTitle("toolbar title");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);

хотя следующие методы отлично работают без getSupportActionBar() на onCreate

mToolbar.setVisibility(View.VISIBLE);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //
    }

попробуйте это:

Xml-Код

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="120dp"
    android:id="@+id/tool_bar"
    android:background="@color/tablayout"
    android:theme="@style/ToolBarStyle"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/app_name"
        android:layout_gravity="center"
        android:id="@+id/toolbar_title"
        android:textSize="18sp"
        android:textColor="@color/white"/>
    </android.support.v7.widget.Toolbar>

Java-Код

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    toolbar = (Toolbar) findViewById(R.id.tool_bar);
    toolbar_text = (TextView)findViewById(R.id.toolbar_title);
    setSupportActionBar(toolbar);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    toolbar.setLogo(R.drawable.ic_toolbar);
}

Если ваша цель-установить статическую строку на панели инструментов, самый простой способ сделать это-установить метку деятельность в AndroidManifest.XML-код:

<activity android:name=".xxxxActivity"
          android:label="@string/string_id" />

панель инструментов получит эту строку без кода. (работает для меня с библиотеками v27.)


чтобы изменить название для каждого вида деятельности

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_pizza);
    setTitle(getResources().getText(R.string.title));
}

если вы используете CollapsibleToolbarLayout вместе с Toolbar тогда вам нужно будет установить заголовок в обоих макетах

установите панель инструментов как панель действий в onCreate метод

protected void setUpToolBar() {

    if (mToolbar != null) {
        ((HomeActivity) getActivity()).setSupportActionBar(mToolbar);
        mToolbar.setTitleTextColor(Color.WHITE);
        mToolbar.setTitle("List Detail");
        mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                getActivity()
                        .getSupportFragmentManager().popBackStack();
            }
        });
        ((HomeActivity) getActivity()).getSupportActionBar()
                .setDisplayHomeAsUpEnabled(true);
    }
}

позже просто обновить название панели инструментов с помощью setTitle метод

 mToolbar .setTitle(productFromShoppingList.getProductName()); 
 mCollapsingToolbar.setTitle(productFromShoppingList.getProductName());

у меня странное поведение, которое может вам помочь.
Это работает, но это не имеет никакого эффекта в onCreate только:

toolbar.setTitle("title");

попробуйте использовать это в onCreate:

yourActivityName.this.setTitle("title")

Это можно сделать, установив android:label атрибут вашей деятельности в :

<activity android:name="my activity"
 android:label="The Title I'd like to display" />

а затем добавьте эту строку в onCreate ():

getSupportActionBar().setDisplayShowTitleEnabled(true);

убедитесь, что вы добавили эту опцию:

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

хотя это не сразу относится к этой конкретной настройке, я обнаружил, что удаление "CollapsingToolbarLayout" из моего XML, который обертывал мою панель инструментов внутри AppBarLayout, заставило все работать.

Итак, это:

      <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_height="?attr/actionBarSize"
                app:layout_scrollFlags="scroll|enterAlways"
                app:navigationIcon="@drawable/ic_arrow_back_white_24dp" />

        </android.support.design.widget.AppBarLayout>

вместо этого:

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <android.support.design.widget.CollapsingToolbarLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/collapsingToolbar"
                android:minHeight="?attr/actionBarSize"
                app:layout_scrollFlags="enterAlways|scroll|snap">

                <android.support.v7.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_height="?attr/actionBarSize"
                    app:navigationIcon="@drawable/ic_arrow_back_white_24dp" />
            </android.support.design.widget.CollapsingToolbarLayout>

        </android.support.design.widget.AppBarLayout>

затем я устанавливаю заголовок в onCreate действия, прежде чем вызывается setSupportActionBar ().


ответ в документации (которую вы можете найти здесь):

чтобы использовать методы утилиты ActionBar, вызовите действия метод getSupportActionBar (). Этот метод возвращает ссылку на объект верхней панели совместимости приложений. Как только у вас будет эта ссылка, вы можете позвонить любой из методов ActionBar для настройки панели приложений. Например, скрыть панель приложений, вызов ActionBar.скрывать.)(

Это решение, которое вы действительно нашли. Просто думал дать ссылку на официальную документацию (которая, видимо, мало читали).


это происходит потому, что вы используете панель инструментов и ActionBar. Теперь, когда вы хотите использовать панель инструментов в качестве панели действий, Первое, что вам нужно сделать, это отключить панель действий.

самый простой способ-расширить тему с Theme.AppCompat.NoActionBar.