CollapsingToolbarLayout的setTitle()方法不再起作用了

12
CollapsingToolbarLayoutsetTitle()方法曾经存在一些错误(例如只有在滚动后才显示,已在v22.2.1中修复)。今天我更新到v23.0.0,但它根本不起作用,就好像没有标题一样。通过延迟多次调用它,我可以看到有时标题是存在的,但它并不可靠(比如,你切换到另一个片段,然后回到第一个,就没有标题了)。我发现有一个新的属性app:titleEnabledCollapsingToolbarLayout.setTitleEnabled(boolean)。我把它们都设为true,但实际上并没有改变什么。你们有人遇到同样的问题吗?我想知道市场上有多少应用程序真正使用这个设计库,从第一个版本开始它就充满了错误,并且越来越糟糕了。
编辑
进一步测试表明(我不确定),它与新的AppBarLayout.setExpanded() API有关。如果我调用:
collapsingToolbar.setTitle("title");

它起作用,但如果我调用

collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(true, true);
//OR
appbarLayout.setExpanded(true, true);
collapsingToolbar.setTitle("title");

无标题显示,即使使用 setExpanded(false, true) 尝试折叠工具栏也是一样。

Edit2 (2015年9月)

事实并非如此。即使我从不调用 abl.setExpanded()app:expanded,这个问题仍然存在。现在我们已经更新到v23.0.1,但这个问题仍未被解决。似乎只有少数人遇到了这个问题,因为我在这里和官方的错误列表中都找不到任何相关信息。我在这里提交了一个错误:here


嗨,如果您在这里发布相关的代码(Java和XML),我或其他人可能会帮助您。到目前为止,我一直在使用CollapsingToolbarLayout而没有遇到任何问题。 - Luboš Staráček
我正在使用24.0.1版本时遇到了这个问题。CoordinatorLayout应该从一般的设计隐喻中被淘汰。这玩意真是让人头疼,简直就是灾难。我已经在开发Android应用3年了,但仍无法理解这个POS(译者注:指“Piece of Shit”,即烂货、垃圾)。 - Neon Warge
2个回答

5

标题没有显示是因为AppBarLayout的布局高度太小了。我在v22.2.1中使用了110dp的高度,这个高度是可以正常显示标题的。但是升级到v23.0.0后,我不得不将高度改为至少125dp才能显示标题。不需要使用新的属性或方法调用。以下是我的布局:

<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_height="125dp"
    android:layout_width="match_parent"
    android:fitsSystemWindows="true"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/toolbarLayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:expandedTitleTextAppearance="@style/ExpandedAppBarTitle"
        app:expandedTitleMarginStart="14dp"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_height="?attr/actionBarSize"
            android:layout_width="match_parent"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:layout_collapseMode="pin"/>
    </android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>

<android.support.v7.widget.RecyclerView android:id="@android:id/list"
                                        xmlns:android="http://schemas.android.com/apk/res/android"
                                        android:layout_width="match_parent"
                                        android:layout_height="match_parent"
                                        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

<android.support.design.widget.FloatingActionButton
    android:id="@+id/addbtn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="end|bottom"
    app:borderWidth="0dp"
    android:layout_margin="@dimen/fab_margin"
    android:src="@drawable/ic_add" />


如果您不想更高的栏,则可以将CollapsingToolbarLayout的expandedTitleMarginTop设置为某个值。 - Zoon Nooz
我已经尝试将高度设置为200dp,但仍然无法正常工作。 - Sourav Chandra
1
我仍然在使用v24.0.2时遇到了这个问题。 - Neon Warge
这对我来说并没有解决问题。只有当我将高度设置得足够大,以便它可以展开和折叠,例如300dp时,它才能正常工作。 - fobbymaster

3

我在我的应用程序中尝试了一些组合:

collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(true, true); // works

collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(true, false); // works

collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(false, true); // works

collapsingToolbar.setTitle("title");
appbarLayout.setExpanded(false, false); // doesn't show title

我在我的片段的onCreateView()方法中调用了这些方法。AppBarLayout默认是展开的,可以通过在布局中的XML中更改,尽管当我定义它不展开时,它也不显示标题。奇怪的事情...无论如何,如果你有一些想法能进一步帮助我,让我知道。


我不再确定它是否与setExpanded相关。我尝试过仅使用collapsingToolbar.setTitle("title");,它可以正常工作,但只有9次中的1次(这并不好)。 - natario
在动画中添加“true”可以修复它,显然...听起来像是由于折叠混乱了标题/工具栏元素的z-index并覆盖了它,而动画强制一切按正确顺序绘制...无论如何,这是个好发现,我现在也在我的应用程序中使用它。 - Mdk
更新:在xml中设置app:expanded="false"会使标题不可见,除非您通过编程方式展开和重新折叠元素...这很糟糕。 - Mdk
请注意,即使从未使用过 app:expandedabl.setExpanded(),我仍会遇到此问题。我同意 z-index 的问题。 - natario

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