And*_*idP 34 android android-layout android-fragments material-design android-recyclerview
我有一个带有recyclerview的协调器布局,我想以编程方式添加.它以编程方式添加的原因是因为不同的片段会使协调器布局膨胀,可能会使用不同类型的Recyclerviews.
通常对于recyclerview,为了设置此行为,我会将其添加到xml中:
app:layout_behavior="@string/appbar_scrolling_view_behavior"
Run Code Online (Sandbox Code Playgroud)
这很好.但是,当我以编程方式创建recyclerviews然后将它们添加到framelayout时,我完全不知道如何添加此行为:
<?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>
Run Code Online (Sandbox Code Playgroud)
Bar*_*ski 89
Behavior是一个参数CoordinatorLayout.LayoutParams.您可以在CoordinatorLayout.LayoutParamswith setBehaviormethod 的实例上设置行为.
要获得一个Behavior代表相同内容的正确对象,@string/appbar_scrolling_view_behavior您应该创建一个实例AppBarLayout.ScrollingViewBehavior.
编辑1:
我没有一个例子,但我可以给你写一个.假设你有一个View(例如yourView)已经附加到CoordinatorLayout(因此它已经有LayoutParams).
CoordinatorLayout.LayoutParams params =
(CoordinatorLayout.LayoutParams) yourView.getLayoutParams();
params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
yourView.requestLayout();
Run Code Online (Sandbox Code Playgroud)
您可能需要稍微调整一下(我没有测试过,但它应该工作).
编辑2:
只是一个小小的免责声明,因为不是每个人似乎都完全理解这个例子.
yourView在上面的例子中提到的不是它CoordinatorLayout本身.yourView是CoordinatorLayout's孩子View.
接受的答案是正确的,但提供的代码不可编译。这是一个完整的例子
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams)
view.getLayoutParams();
params.setBehavior(new AppBarLayout.ScrollingViewBehavior(view.getContext(), null));
Run Code Online (Sandbox Code Playgroud)
第二个参数是,尽管它没有在支持库中标记AttributeSet为,但拥有它也很好。nullNullable
要layout_behavior使用kotlin以编程方式启用和禁用,请使用以下代码:
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
}
Run Code Online (Sandbox Code Playgroud)
注意:用您的视图替换 swipeRefreshView
| 归档时间: |
|
| 查看次数: |
31516 次 |
| 最近记录: |