如何仅强制使用CollapsingToolbarLayour的两个状态(展开和折叠)?

时间:2015-12-10 23:29:13

标签: android material-design android-support-library android-collapsingtoolbarlayout

我希望CollapsingToolbarLayout(在AppBarLayout内)当用户起床时展开/折叠。当用户在屏幕上按住并移动手指时,CollapsingToolbarLayout应同时更改大小(标准行为)。

我的问题是:" CollapsingToolbarLayout当用户起手时展开/折叠 我有来自材料支持库(片段)的标准解决方案:

(我删除不重要的属性):

<android.support.design.widget.CoordinatorLayout>
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar">
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"/>

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

    <include layout="@layout/content_scrolling" />

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

我尝试像这样处理onTouch事件:

findViewById(R.id.app_bar).setOnTouchListener(new View.OnTouchListener() {

    int counter = 0;
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getActionMasked()) {
            case MotionEvent.ACTION_DOWN:
                counter++;
                Log.d("tag toolbar_layout", "=== ACTION_DOWN "+ counter);
                break;
            case MotionEvent.ACTION_CANCEL:
                counter--;
                Log.d("tag toolbar_layout", " == ACTION_UP " +counter);
                break;
            case MotionEvent.ACTION_CANCEL:
                counter--;
                Log.d("tag toolbar_layout", " == ACTION_CANCEL "+ counter);

            break;
        default:
            Log.d("tag toolbar_layout", "onTouch "+ event.getAction());
        }

        return true;
    }

但我几乎收到ACTION_CANCEL并且非常罕见ACTION_UPACTION_CANCEL太早我在应用收到该事件时仍然屏幕上仍然有手指。在ACTION_CANCEL之后应用程序甚至不再收到任何应用程序。我无法在appbar上拨打setExpanded(true, true)

所以问题是:还有另一种获取用户手指形式CollapsingToolbarLayout的信息吗?

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,您会在用户停止滚动(用户已从屏幕上抬起手指)后尝试完全展开/折叠CollapsingToolbarLayoutAppBarLayout提供了一个滚动标记来捕捉内容[1]以提供此效果:

  

public static final int SCROLL_FLAG_SNAP

     

滚动结束时,如果视图只是部分可见,那么它   将被捕捉并滚动到它最近的边缘。例如,如果   视图只显示它的底部25%,它将被滚动关闭   屏幕完全。相反,如果它的底部75%是可见的那么它   将完全滚动到视图中。

[1] http://developer.android.com/reference/android/support/design/widget/AppBarLayout.LayoutParams.html#SCROLL_FLAG_SNAP