В андроидном приложении 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
.