Подтвердить что ты не робот

Предотвращение CollapsingToolbarLayout сбой, если не требуется

Использование:

compile 'com.android.support:design:23.0.0'
compile 'com.android.support:appcompat-v7:23.0.0'
compile 'com.android.support:cardview-v7:23.0.0'
compile 'com.android.support:recyclerview-v7:23.0.0'

С обновленным проектом Cheesesquare.

В детали сыра я удаляю 2 карты (чтобы иметь только один). Есть ли способ предотвратить свертывание панели инструментов, которая показывает пустое пространство?

введите описание изображения здесь

4b9b3361

Ответ 1

Чтобы реализовать такое поведение в примере Cheesesquare, просто измените параметр android:layout_height в NestedScrollView на wrap_content. Это предотвратит прокрутку содержимого, если оно будет достаточно маленьким для размещения на экране.

И чтобы предотвратить прокрутку с помощью CollapsingToolbarLayout вы должны программно установить layout_scrollFlags параметра AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP значение AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP.

Здесь описано, как вы можете сделать это.

Ответ 2

Вы можете использовать следующий код для этого:

   public static void stopScroll() {
    AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
    toolbarLayoutParams.setScrollFlags(0);
    collapsing_toolbar.setLayoutParams(toolbarLayoutParams);

    CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
    appBarLayoutParams.setBehavior(null);
    appbar.setLayoutParams(appBarLayoutParams);
}

public static void startScroll() {
    AppBarLayout.LayoutParams toolbarLayoutParams = (AppBarLayout.LayoutParams) collapsing_toolbar.getLayoutParams();
    toolbarLayoutParams.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_ENTER_ALWAYS);
    collapsing_toolbar.setLayoutParams(toolbarLayoutParams);

    CoordinatorLayout.LayoutParams appBarLayoutParams = (CoordinatorLayout.LayoutParams) appbar.getLayoutParams();
    appBarLayoutParams.setBehavior(new AppBarLayout.Behavior());
    appbar.setLayoutParams(appBarLayoutParams);
}

Ответ 3

В xml я использовал свойство

app:layout_scrollFlags="snap" в <android.support.design.widget.CollapsingToolbarLayout

и следуя в действии

 toolbar = (Toolbar) findViewById(R.id.toolbar);
 setSupportActionBar(toolbar);
 toolbar.setTitle(null);
 toolbar.setCollapsible(false);

Теперь он работает.

Ответ 4

Вот мой рабочий код, который сначала сжимает панель:

_appbar.setExpanded(ложь);

   AppBarLayout _appbar = (AppBarLayout) findViewById(R.id.appbar);
    _appbar.setExpanded(false);

вот макет xml

 <android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/detail_backdrop_height"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsing_toolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        android:fitsSystemWindows="true"
        app:contentScrim="?attr/colorPrimary"
        app:expandedTitleMarginStart="48dp"
        app:expandedTitleMarginEnd="64dp">



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

            app:layout_collapseMode="pin" />





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

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

ссылка: AppBarLayout.setExpanded(boolean)

Ответ 5

Решение для привязки данных, вдохновленное ответом @Vishal

<com.google.android.material.appbar.AppBarLayout
    <com.google.android.material.appbar.CollapsingToolbarLayout
        app:enableCollapsingScroll="@{listItems.size > 0}"

@BindingAdapter("app:enableCollapsingScroll")
fun setCollapsingToolbarLayoutScrollEnabled(collapsingToolbarLayout: CollapsingToolbarLayout, enabled: Boolean?) {
    val lp = collapsingToolbarLayout.layoutParams as AppBarLayout.LayoutParams
    if (enabled.orFalse()) {
        lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL or AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
    } else {
        lp.scrollFlags = AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP
    }
    collapsingToolbarLayout.layoutParams = lp
}