CollapsingToolbarLayout无法显示标题。

23

在我的情况下,当我滚动列表时,工具栏会消失。我正在使用CollapsingToolbarLayout,并且需要设置标题文本。但在我的情况下,尽管我已经设置了标题文本(请参见下面的代码),但标题文本并没有显示出来。有什么问题吗?

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">

<android.support.design.widget.CoordinatorLayout
    android:id="@+id/coordinator"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay"
        app:elevation="0dp">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|enterAlways">


            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                android:background="?attr/colorPrimary"
                android:elevation="0dp"
                android:minHeight="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay">

            </android.support.v7.widget.Toolbar>

        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <FrameLayout
        android:id="@+id/content_frame"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</android.support.design.widget.CoordinatorLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    app:headerLayout="@layout/app_nav_header_main"
    app:menu="@menu/main_drawer" />

</android.support.v4.widget.DrawerLayout>

活动代码:

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.app_activity_with_left_panel);

    mPreferences = PreferenceManager.getDefaultSharedPreferences(this);
    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    mCollapsingToolbarLayout = (CollapsingToolbarLayout)findViewById(R.id.collapsing);
    setSupportActionBar(mToolbar);
    setTitle(getIntent().getStringExtra(TITLE));
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);
}

@Override
public void setTitle(CharSequence title) {
    if (title != null && !title.toString().isEmpty()) {
        mTitle = title.toString();
        mCollapsingToolbarLayout.setTitle(mTitle);
    }
}

请删除 @override 标签并重试。 - V-rund Puro-hit
@vrund purohit 不起作用。 - GPPSoft
尝试这个:ActionBar ab = getActionBar(); ab.setTitle("我的标题"); - Suhas Bachewar
@GPPSoft 执行 getSupportActionBar().setTitle("Title"); - Jay Rathod
5个回答

41

移除此段落

@Override
public void setTitle(CharSequence title) {
    if (title != null && !title.toString().isEmpty()) {
        mTitle = title.toString();
        mCollapsingToolbarLayout.setTitle(mTitle);
    }
}

并在您的 OnCreate() 中添加以下内容。

    mCollapsingToolbarLayout = (CollapsingToolbarLayout)findViewById(R.id.collapsing);
    mCollapsingToolbarLayout.setTitleEnabled(false);

    mToolbar.setTitle("title");

这将禁用默认标题的折叠行为,并将静态标题添加到工具栏中。


@Ironman 谢谢。现在它可以工作了。但是没有设置任何标题文本。显示默认应用程序名称。:( mCollapsingToolbarLayout.setTitle("title"); 不改变标题。 - GPPSoft
@Ironman 仍然显示默认应用名称标题,我尝试更改标题,但没有改变。 - GPPSoft
@Ironman 抱歉。这个程序是有效的。当应用程序启动时,它不会更改标题(显示默认应用程序名称)。但是,如果您在单击按钮时更改它,它就可以工作。为什么会这样呢? - GPPSoft
@GPPSoft,这个 mCollapsingToolbarLayout.setTitle() 不起作用是因为我们将 mCollapsingToolbarLayout.setTitleEnabled(false); 设置为 false。只有当 mCollapsingToolbarLayout.setTitleEnabled(true) 为 true 时,我们才能设置它。 - Harshad Pansuriya
@GPPSoft 请阅读此链接 https://developer.android.com/reference/android/support/design/widget/CollapsingToolbarLayout.html - Harshad Pansuriya
显示剩余5条评论

16

如果你想禁用标题,只需添加以下内容:

app:titleEnabled="false"

那么工具栏本身的标题将会出现,因此我们将使用以下方法禁用它:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayShowTitleEnabled(false);

或使用样式XML中的这些行

<item name="android:displayOptions">showHome|useLogo</item>
<item name="displayOptions">showHome|useLogo</item>

搜索了很多,希望这个搜索摘要有所帮助。


2
你解决了我的问题。谢谢。特别是“setDisplayShowTitleEnabled(false);”。 - BinqiangSun

3
上面的答案是正确的,但我试了多次才做对。最终我在xml中为CollapsingToolbarLayout设置app:titleEnabled="false",而对于Toolbar本身则不进行任何设置。
在代码中,我设置了supportActionBar.setDisplayShowTitleEnabled(true)supportActionBar.title = "我的标题"
我的代码: layout.xml:
<com.google.android.material.appbar.CollapsingToolbarLayout
    android:id="@+id/fragment_main_toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:toolbarId="@id/toolbar"
    app:titleEnabled="false">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        app:menu="@menu/menu_main" />

</com.google.android.material.appbar.CollapsingToolbarLayout>

fragment.kt:

val toolbar = view.findViewById<androidx.appcompat.widget.Toolbar>(R.id.toolbar)
myTitle = "This is my app title"

(activity as AppCompatActivity).let { myActivity ->
    myActivity.setSupportActionBar(toolbar)
    myActivity.supportActionBar?.setDisplayShowTitleEnabled(true)
    myActivity.supportActionBar?.title = myTitle 

    // these are not needed:
    //collapsingToolbar.title = myTitle 
    //collapsingToolbar.isTitleEnabled = true
    //toolbar.title = myTitle 
    //myActivity.title = myTitle         
}

3
在我的情况下,问题是由于将工具栏的layout_height设置为“wrap_content”导致的。将此属性设置为特定值,如?attr/actionBarSize,CollapsingToolbarLayout标题变得可见。

1
使用以下代码:app:expandedTitleTextAppearance="@android:color/transparent",与您的CollapsingToolbarLayout一起使用。

删除那个覆盖方法。 - Vivek_Neel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接