В андроидном приложении Toolbar.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 к стилю parent:

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

Но проблема не решена.

Ответ 1

Нашел решение:

Вместо:

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");

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

Ответ 2

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

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

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

позже...

mActionBarToolbar.setTitle(title);

Ответ 3

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

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

На самом деле мой 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 So My Final 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() для CollapsingToolbarLayout

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

Чтобы установить заголовок для каждого заголовка заголовка Navbar

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

    return myView;
}

Ответ 7

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

<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>  

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

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

Сообщите мне результат.

Ответ 8

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

Ответ 9

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

Ответ 10

Это не только о .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) {
        //
    }

Проблема только с событием onCreate, вы все равно можете использовать mToolbar.setTitle() позже вместо надоедливого getSupportActionBar().setTitle(), например, если вы добавите это в onCreate оно будет работать (потому что оно будет выполнено позже, после onCreate)

mHandler.post(new Runnable() {
    @Override
    public void run() {
        mToolbar.setTitle("toolbar title");
    }
});

Я предпочитаю использовать это решение fooobar.com/questions/34365/... чем fooobar.com/questions/34365/... потому что если вы меняете заголовок много раз (в разных функциях), его удобнее использовать mToolbar.setTitle() больше, чем getSupportActionBar().setTitle() и вы не увидите раздражающего уведомления о нулевом исключении, как с getSupportActionBar().setTitle()

Ответ 11

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

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

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

Снимок экрана: введите описание изображения здесь

Ответ 12

Просто используйте это в своем адаптере, Где MainActivity - ваша AppCompactActivity. Вызовите его из любого места.

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

Ответ 13

Я сделал это с помощью -

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

Ответ 14

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

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

Ответ 15

Попробуйте следующее:

Xml Code

<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);
}

Ответ 16

Если вы используете 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());

Ответ 17

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

toolbar.setTitle("title");

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

yourActivityName.this.setTitle("title")

Ответ 18

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

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

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

Ответ 19

Если вам нужно настроить заголовок через панель инструментов через некоторое время после установки SupportActionBar (@sorianiv) И ваш Toolbar находится внутри CollapsingToolbarLayout, прочитайте это:

mToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.toolbar_layout);
Toolbar toolbar = findViewById(R.id.toolbar);
//toolbar.setTitle(""); // no need to do this
//mToolbarLayout.setTitle("Title"); // if you need an initial title, do this instead
setSupportActionBar(toolbar);

Потом позже,

mToolbarLayout.setTitle("New Title");

Ответ 20

Это можно сделать, установив атрибут android:label вашей активности в файле AndroidManifest.xml:

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

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

getSupportActionBar().setDisplayShowTitleEnabled(true);

Ответ 21

Заголовок приложения не будет отображаться в качестве заголовка по умолчанию для каждого действия, вы можете вставить разные заголовки для каждого действия. В приведенном ниже файле активности onCreate просто вставьте одну строку, чтобы задать заголовок,

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("Your Title Here");

Просто измените текст "Ваше название здесь" на ваш текст.

Ответ 22

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

getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE);

Ответ 23

Хотя это не сразу актуально для этой конкретной установки, я обнаружил, что удаление "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().

Ответ 24

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

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

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

Ответ 25

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

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