在Android应用程序中,Toolbar.setTitle方法无效 - 应用程序名称显示为标题

kro*_*kin 279 android toolbar android-support-library

我正在尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

但是,不显示工具栏上的"我的标题",而是显示应用程序名称%.
似乎setTitle方法没有效果.
我想展示"我的头衔".

UPD: 之前,styles.xml是:

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="windowActionBar">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

所以,我认为没有使用动作栏.我添加NoActionBar到样式父级:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
    <item name="windowActionBar">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

但问题没有解决.

kro*_*kin 536

找到解决方案:

代替:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
mActionBarToolbar.setTitle("My title");
setSupportActionBar(mActionBarToolbar);
Run Code Online (Sandbox Code Playgroud)

我用了:

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My title");
Run Code Online (Sandbox Code Playgroud)

它有效.

  • `getSupportActionBar().setTitle("我的标题");`可能产生'java.lang.NullPointerException' (26认同)
  • 很好的一个,但没有意义的工作这种方式,而不是其他....欢迎来到Android 101 (25认同)
  • 伙计们你真的对@PratikButani评论这么多次评价过吗?如果您使用没有操作栏的样式主题但是自定义**支持工具栏v7**并且您忘记调用`setSupportActionBar(mToolbar)`当然您将获得null exeption,但如果您调用它,则忽略此消息.请阅读 - https://developer.android.com/training/appbar/setting-up.html (9认同)
  • @PratikButani只要在调用getSupportActionBar()之前将工具栏设置为setSupportActionBar(),为什么会这样呢? (8认同)
  • Aha,轻松解决:断言getSupportActionBar()!= null; (3认同)

sor*_*niv 112

对于需要在设置SupportActionBar之后通过工具栏设置标题的任何人,请阅读此内容.

支持库的内部实现只是检查工具栏在设置SupportActionBar时是否具有标题(非空).如果有,则使用此标题代替窗口标题.然后,您可以在加载实际标题时设置虚拟标题.

mActionBarToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
mActionBarToolbar.setTitle("");
setSupportActionBar(mActionBarToolbar);
Run Code Online (Sandbox Code Playgroud)

后来...

mActionBarToolbar.setTitle(title);
Run Code Online (Sandbox Code Playgroud)

  • mActionBarToolbar.setTitle(getResources().getString(R.string.app_name)); 会保证有一个好的默认标题,同时保持答案同样的神奇效果 (2认同)
  • 这没有任何意义(并且对我不起作用)。 (2认同)

Pra*_*ani 75

以上答案完全正确,但对我不起作用.

我用以下方法解决了我的问题.

实际上我的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>
Run Code Online (Sandbox Code Playgroud)

我已经尝试了所有的选项,毕竟我刚刚删除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>
Run Code Online (Sandbox Code Playgroud)

现在你必须使用setTitle()上面的答案:

mActionBarToolbar = (Toolbar) findViewById(R.id.confirm_order_toolbar_layout);            
setSupportActionBar(mActionBarToolbar);
getSupportActionBar().setTitle("My Title");
Run Code Online (Sandbox Code Playgroud)

现在,如果你想使用CollapsingToolbarLayoutToolbar再在一起,你必须使用setTitle()CollapsingToolbarLayout

CollapsingToolbarLayout collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.confirm_order_mail_layout);
collapsingToolbarLayout.setTitle("My Title");
Run Code Online (Sandbox Code Playgroud)

愿它能帮到你.谢谢.

  • 对我来说,为 CollapsingToolbarLayout 设置标题的技巧是有效的。非常感谢! (2认同)
  • 由于工具栏嵌套在CollapsingToolbarLayout下,因此折叠工具栏布局会覆盖它.这适合我. (2认同)
  • 你救了我的命!在使用collapsingToolbarLayout.seTitle("Title")之前,您必须setSupportActionbar; (2认同)

小智 35

您只需使用即可更改任何活动名称

Acitivityname.this.setTitle("Title NAme");
Run Code Online (Sandbox Code Playgroud)

  • 或者在 Kotlin 中简单地使用 `title = "Title"` 或者在 Java 中使用 `this.setTitle("Title")`。 (2认同)

Axr*_*rov 33

试试这个,你可以直接用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">
Run Code Online (Sandbox Code Playgroud)


小智 15

设置每个Navbar片段标题的标题

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

    return myView;
}
Run Code Online (Sandbox Code Playgroud)


Rag*_*han 12

试试这个..这个方法对我有用.. !! 希望它可以帮助某人.. !!

<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>  
Run Code Online (Sandbox Code Playgroud)

要在工具栏中显示徽标,请尝试以下代码段.//设置drawable

toolbar.setLogo(ContextCompat.getDrawable(context, R.drawable.logo));
Run Code Online (Sandbox Code Playgroud)

让我知道结果.


小智 11

 getSupportActionBar().setTitle("Your Title");
Run Code Online (Sandbox Code Playgroud)

  • 这个答案是一个存根,而应该是一个[comment](https://stackoverflow.com/help/privileges/comment),因为这样的简短答案可能被认为是低质量的。获得足够的[信誉](https://stackoverflow.com/help/whats-reputation)后,您就可以发表评论了。如果您没有足够的声誉,请阅读[this post](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an-i -而不是),如果您还没有足够的声誉,该如何贡献。 (2认同)

red*_*nzz 8

请参阅https://code.google.com/p/android/issues/detail?id=77763.显然它应该像那样工作.一旦调用setSupportActionBar()方法调用,ActionBar委托就有责任将调用路由到正确的视图.


use*_*104 7

对于需要在设置 SupportActionBar (@sorianiv) 后一段时间通过工具栏设置标题并且Toolbar在 a 中的任何人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);
Run Code Online (Sandbox Code Playgroud)

后来,

mToolbarLayout.setTitle("New Title");
Run Code Online (Sandbox Code Playgroud)


use*_*r25 6

这不仅仅是关于 .setTitle

支持工具栏(Appcompat v7)的更多方法onCreate仅适用于

getSupportActionBar().method()

而且不合作 mToolbar.method()

例子:

getSupportActionBar().setTitle("toolbar title");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
Run Code Online (Sandbox Code Playgroud)

虽然接下来的方法,而没有正常工作getSupportActionBar()onCreate

mToolbar.setVisibility(View.VISIBLE);
mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //
    }
Run Code Online (Sandbox Code Playgroud)

问题只有onCreate事件,你仍然可以使用mToolbar.setTitle()以后而不是烦人getSupportActionBar().setTitle(),例如,如果你添加onCreate它将工作(因为它将在以后执行,之后onCreate)

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

我更喜欢使用这个解决方案/sf/answers/2480141331/而不是/sf/answers/1855480091/,因为如果你多次更改标题(在不同的功能中),它使用起来会更舒服mToolbar.setTitle()比较长的getSupportActionBar().setTitle()一个,你没有看到关于null异常的恼人通知,如getSupportActionBar().setTitle()


Nik*_* G. 5

我试图从片段重命名工具栏

它帮助了我,我希望能帮助别人

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
Run Code Online (Sandbox Code Playgroud)

截图: 在此输入图像描述


Moh*_*hag 5

应用程序标题不会显示为每个活动的默认标题,您可以在每个活动中插入不同的标题。在 onCreate 下方的活动文件中,只需粘贴一行即可设置标题,

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

只需将文本“Your Title Here”更改为您的文本即可。