web-dev-qa-db-ja.com

不要な場合は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枚のカードを削除します(1枚のみ)。空白を表示するツールバーの崩壊を防ぐ方法はありますか?

enter image description here

23
stankocken

Cheesesquare の例でこのような動作を実装するには、NestedScrollViewのAndroid:layout_heightパラメーターをwrap_contentに変更するだけです。画面に収まるほど小さい場合、コンテンツによるスクロールを防ぎます。

また、CollapsingToolbarLayoutによるスクロールを防ぐには、layout_scrollFlagsパラメーターをAppBarLayout.LayoutParams.SCROLL_FLAG_SNAP値にプログラムで設定する必要があります。

ここ これを行う方法を説明しました。

28
DmitryArc

これには以下のコードを使用できます。

   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);
}
2
Vishal Vaishnav

Xmlではプロパティを使用しました

app:layout_scrollFlags="snap" in <Android.support.design.widget.CollapsingToolbarLayout

アクティビティでフォロー

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

現在は機能しています。

1
Android Boy

@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
}
1
li2
  AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams) activityUserGroupProfleBinding.collapsingToolbarLayout.getLayoutParams();
        if (logic) {
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL | AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED);
        } else {
            params.setScrollFlags(AppBarLayout.LayoutParams.SCROLL_FLAG_SNAP);
        }
        activityUserGroupProfleBinding.collapsingToolbarLayout.setLayoutParams(params);
0
Dishant Kawatra

最初にバーを折りたたむための私の作業コードは次のとおりです。

_appbar.setExpanded(false);

   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)

0
hoogw