CoordinatorLayout + NestedScrolling Grand-Child的自定义行为

时间:2016-08-31 07:10:14

标签: android behavior android-coordinatorlayout android-nestedscrollview

我试图在(!)a(嵌套)Scrollview中对Scroll Events采取行动。

我在Scrollview中有一个项目,我希望"偷看" (如果它在滚动视图/屏幕中最初不可见,则转换为可见屏幕区域)几秒钟。但是一旦滚动容器,我想隐藏它(转换回原点)。

因此,我试图使用CoordinatorLayout行为来紧密耦合scrollView和我的(自定义)视图。

the article之后,我尝试编写自定义行为,但我发现,我无法在我的视图中应用此行为,因为它不是CoordinatorLayout的子项。如果我必须把它放在一个直接的孩子身上,我怎么能对这个曾经的大孩子采取行动呢?

如何实现这一目标?

布局看起来像那样:

<CoordinatorLayout>
   <NestedScrollView>
       <LinearLayout>
          ...
          <MyView/>
       <LinearLayout/>
   </NestedScrollView>
</CoordinatorLayout>

行为非常简单:

public class MyBehaviour extends CoordinatorLayout.Behavior{

    ...

    @Override
    public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, View child, View directTargetChild, View target, int
            nestedScrollAxes) {
        return true;
    }

    @Override
    public void onNestedScroll(CoordinatorLayout coordinatorLayout, View child, View target, int dxConsumed, int dyConsumed, int
            dxUnconsumed, int dyUnconsumed) {
        super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed);

        // act on MyView
    }
}

1 个答案:

答案 0 :(得分:0)

  

在这篇文章之后,我尝试编写一个自定义行为,但我发现,我不能在我的视图中应用此行为,因为它不是CoordinatorLayout的子项。

这不完全正确。可以模拟视图对CoordinatorLayout Behaviour更改做出反应的情况。这是一个简单的例子:

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <android.support.v4.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <android.support.design.widget.CoordinatorLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="1700px"
                    android:text="Hello World!"/>

                <android.support.design.widget.FloatingActionButton
                    android:id="@+id/fab"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_gravity="bottom|end"
                    android:layout_margin="@dimen/fab_margin"
                    android:src="@android:drawable/ic_dialog_email"/>

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

        </android.support.v4.widget.NestedScrollView>

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

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

正如您所见,FloatingActionButton位于

之内

CoordinatorLayout - &gt; CoordinatorLayout - &gt; NestedScrollView - &gt; CoordinatorLayout

在此类布局FAB对显示的Snackbar做出反应:

enter image description here enter image description here

但是,此处的问题是与布局高度相结合,因此我强烈建议您重新考虑您的设计。