プログラムで追加したいrecyclerviewを持つコーディネーターレイアウトがあります。プログラムで追加された理由は、コーディネーターレイアウトを膨らませるさまざまなフラグメントが異なるタイプのリサイクラビューを使用する可能性があるためです。
通常、recyclerviewの場合、この動作を設定するには、xmlに追加します。
app:layout_behavior="@string/appbar_scrolling_view_behavior"
それはうまくいきます。ただし、プログラムでリサイクラービューを作成し、それらをフレームレイアウトに追加するときに、この動作を追加する方法については完全に迷っています。
<?xml version="1.0" encoding="utf-8"?>
<Android.support.design.widget.CoordinatorLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools" Android:layout_width="match_parent"
Android:id="@+id/coordLayout"
Android:layout_height="match_parent" Android:fitsSystemWindows="true"
tools:context=".MainActivity">
<Android.support.design.widget.AppBarLayout Android:id="@+id/app_bar"
Android:fitsSystemWindows="true" Android:layout_height="@dimen/app_bar_height"
Android:layout_width="match_parent" Android:theme="@style/AppTheme.AppBarOverlay">
<Android.support.design.widget.CollapsingToolbarLayout Android:id="@+id/toolbar_layout"
Android:fitsSystemWindows="true" Android:layout_width="match_parent"
Android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:contentScrim="?attr/colorPrimary">
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_height="?attr/actionBarSize"
Android:layout_width="match_parent"
app:layout_collapseMode="pin"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<FrameLayout
Android:id="@+id/frameLayout"
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
</FrameLayout>
</Android.support.design.widget.CoordinatorLayout>
Behavior
はCoordinatorLayout.LayoutParams
のパラメーターです。 setBehavior
メソッドを使用して、CoordinatorLayout.LayoutParams
のインスタンスに動作を設定できます。
@string/appbar_scrolling_view_behavior
と同じものを表す適切なBehavior
オブジェクトを取得するには、 AppBarLayout.ScrollingViewBehavior
のインスタンスを作成する必要があります。
編集1:
実例はありませんが、あなたに書いてもいいでしょう。既にView
に接続されているyourView
(たとえばCoordinatorLayout
)があると仮定します(したがって、既にLayoutParams
を持っています)。
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) yourView.getLayoutParams();
params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
yourView.requestLayout();
少し調整する必要があるかもしれません(テストしていませんが、動作するはずです)。
編集2:
誰もがこの例を完全に理解しているわけではないからです。
上記の例で言及したyourView
は、[〜#〜] not [〜#〜]CoordinatorLayout
そのものです。 yourView
はCoordinatorLayout's
子View
です。
受け入れられた答えは正しいですが、提供されたコードはコンパイルできません。ここに完全な例があります
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams)
view.getLayoutParams();
params.setBehavior(new AppBarLayout.ScrollingViewBehavior(view.getContext(), null));
2番目のパラメータはAttributeSet
であり、null
としても問題ありませんが、サポートライブラリではNullable
としてマークされていません。
kotlinを使用してプログラムでlayout_behavior
を有効または無効にするには、次のコードを使用します。
fun enableLayoutBehaviour() {
val param: CoordinatorLayout.LayoutParams = swipeRefreshView.layoutParams as CoordinatorLayout.LayoutParams
param.behavior = AppBarLayout.ScrollingViewBehavior()
}
fun disableLayoutBehaviour() {
val param: CoordinatorLayout.LayoutParams = swipeRefreshView.layoutParams as CoordinatorLayout.LayoutParams
param.behavior = null
}
注:swipeRefreshViewをビューに置き換えます