В панели инструментов приложения для 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>
но проблема не устранена.
любая помощь очень ценится.
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()наCollapsingToolbarLayoutCollapsingToolbarLayout 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">
чтобы задать заголовок для каждого фрагмента 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 для маршрутизации вызова в правильное представление.
Я попытался переименовать панель инструментов из фрагмента
это помогло мне, я надеюсь помочь кому-то еще
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
просто используйте это в вашем адаптере, Где 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()наonCreatemToolbar.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.xmlfile:<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