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



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


Фрагмент кода:


Основная активность.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>


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



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


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



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

553   23  

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

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

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

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

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() на 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">

просто вы можете изменить любое имя активности с помощью

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

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

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>  

для отображения логотипа на панели инструментов попробуйте следующий фрагмент. // Набор рисунков

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 атрибут вашей деятельности в AndroidManifest.xml file:

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

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

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

самый простой способ, чтобы ваша тема расширить от Theme.AppCompat.NoActionBar.

Comments

    Ничего не найдено.