CollapsingToolbarLayout setTitle() больше не работает

В методе setTitle() из CollapsingToolbarLayout уже были некоторые ошибки (например, отображение только после прокрутки, исправлено в v22.2.1).

Сегодня обновился до v23.0.0, а он просто не работает, типа не показывается заголовок. Вызывая его несколько раз с задержкой, я вижу, что иногда заголовок есть, но он действительно ненадежен (например, вы переключаетесь на другой фрагмент, затем возвращаетесь к первому, и заголовка больше нет).

Я обнаружил новый атрибут, app:titleEnabled или CollapsingToolbarLayout.setTitleEnabled(boolean). Я установил для обоих значение true, но на самом деле это ничего не меняет.

Кто-нибудь из вас испытывает такое же поведение?

Интересно, сколько приложений на рынке действительно используют эту библиотеку дизайна, она была полна ошибок с самого первого выпуска и не становится лучше.

Редактировать

При дальнейшем тестировании кажется (на 100% не уверен) связано с новым AppBarLayout.setExpanded() апи.

Если я позвоню:

collapsingToolbar.setTitle("title");

это работает, но если я позвоню

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

это не так - заголовок не показан. То же самое с setExpanded(false, true), т.е. е. пытаюсь свернуть панель инструментов.

Редактировать2 (сентябрь 2015 г.)

Ну нет. Проблема присутствует, даже если я никогда не звоню abl.setExpanded() или app:expanded. Кроме того, сейчас мы используем версию 23.0.1, и это до сих пор не исправлено. Похоже, лишь немногие из нас столкнулись с этим, потому что я не смог найти ничего ни здесь, ни в официальном списке ошибок. Я сообщил об ошибке здесь.


person natario    schedule 18.08.2015    source источник
comment
Привет, я или кто-либо другой мог бы помочь вам, если бы вы разместили здесь связанный код (Java и XML). До сих пор я использовал CollapsingToolbarLayout без каких-либо проблем.   -  person Luboš Staráček    schedule 18.08.2015
comment
Я столкнулся с этой проблемой, используя 24.0.1 CoordinatorLayout, который следует распустить из общей метафоры дизайна. Его боль в том, черт возьми, с чем работать. Прошло 3 года, как я разрабатывал Android, и я не мог понять этот POS.   -  person Neon Warge    schedule 24.09.2016


Ответы (2)


Заголовок не отображается, поскольку высота макета AppBarLayout слишком мала. У меня была высота 110dp, и это работало в v22.2.1. После обновления до версии 23.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" />

person hfann    schedule 30.08.2015
comment
если вам не нужна более высокая полоса, вы можете установить expandedTitleMarginTop CollapsingToolbarLayout на некоторое значение - person Zoon Nooz; 23.09.2015
comment
Я пытался установить высоту до 200dp, но это все равно не работает. - person Sourav Chandra; 21.11.2015
comment
Я все еще испытываю эту проблему, используя v24.0.2 - person Neon Warge; 24.09.2016
comment
Это не решает проблему для меня. Это работает только в том случае, если я устанавливаю достаточно большую высоту, чтобы она могла расширяться и сжиматься, например, 300dp. - person fobbymaster; 22.02.2017

Я пробовал некоторые комбинации в своем приложении:

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 в вашем макете, хотя, когда я определяю, что он не расширяется в XML, он также не показывает заголовок. Странные вещи... в любом случае, если у вас есть идея, чем я могу помочь, дайте мне знать.

person Luboš Staráček    schedule 19.08.2015
comment
Я больше не уверен, что это связано с setExpanded. Я пробовал просто использовать collapsingToolbar.setTitle(title); и это работает, например, в 9 раз больше 10 (что не очень хорошо). - person natario; 19.08.2015
comment
Добавление true к анимации, по-видимому, исправляет это ... мне кажется, что это связано с тем, что схлопывание портит z-индекс элемента заголовка / панели инструментов и идет поверх него, в то время как анимация заставляет все рисоваться в правильном заказ... в любом случае, отличная находка, теперь я использую это и в своем приложении - person Mdk; 17.09.2015
comment
Обновление: установка app:expanded="false" в xml делает заголовок невидимым, если вы не расширяете и не сворачиваете элемент программно... что отстой - person Mdk; 18.09.2015
comment
@Mdk: я зарегистрировал проблему здесь: code.google.com/p/android/issues/ - person natario; 19.09.2015
comment
Обратите внимание, что я получаю эту проблему, даже когда никогда не использую app:expanded или abl.setExpanded(). Я согласен с материалом z-index. - person natario; 19.09.2015