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