2

当发生一定数量的滚动并且滚动结束时,我试图让 CollapsingToolbarLayout 展开/折叠。

我让它按预期工作,但我需要的是工具栏是可见的或隐藏的,而不是半的,所以基本上可以扩展或协作。

我试图在没有运气的情况下找到解决方案。

这是我现在的样子:

my_activity.xml

<?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"
    android:id="@+id/myLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:padding="0dp"
        android:layout_margin="0dp"
        android:id="@+id/myPager"/>

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appBar"
        android:layout_width="match_parent"
        android:layout_height="112dp"
        android:minHeight="?attr/actionBarSize">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:titleEnabled="false"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

            <android.support.v7.widget.Toolbar
                android:id="@+id/appToolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                >
            </android.support.v7.widget.Toolbar>

            <android.support.design.widget.TabLayout
                style="@style/AppTheme.TabLayout"
                android:id="@+id/appTabs"
                android:scrollbars="horizontal"
                android:layout_gravity="bottom"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:tabMode="fixed"
                app:tabGravity="fill"
                app:layout_scrollFlags="scroll|enterAlways" />

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

如果我使用onOffsetChanged,我的应用程序会冻结,这是因为每次滚动更改时都会发生这种情况吗?

我的活动.java

public class MyActivity extends AppCompatActivity {
    private AppBarLayout appBarLayout;
    private android.support.v7.app.ActionBar mToolbar;


    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);

        appBarLayout = (AppBarLayout)findViewById(R.id.appBar);
        mToolbar = getSupportActionBar();

        appBarLayout.setExpanded(true);
        appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
                if(verticalOffset == 0 || verticalOffset <= mToolbar.getHeight()) {
                    appBarLayout.setExpanded(false);
                } else {
                    appBarLayout.setExpanded(true);
                }
            }
        });


    }
}
4

2 回答 2

4

只需指定snap...

app:layout_scrollFlags="exitUntilCollapsed|scroll|snap"

...在您的 XML 定义中:

<android.support.design.widget.CollapsingToolbarLayout
    android:id="@+id/collapsing_toolbar"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:titleEnabled="false"
    app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
于 2016-06-26T01:41:50.290 回答
2

我找到了解决方案,将其写入您的 AppCompatActivity 并使其适应您的代码:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    try {
        AppBarLayout appBarLayout;
        appBarLayout = ((AppBarLayout) findViewById(R.id.layout_toolbar));
        if (ev.getAction() == ev.ACTION_UP) {
            if ((collapsingToolbarLayout.getBottom() - collapsingToolbarLayout.getTop()) > appBarLayout.getBottom() * 2) {
                appBarLayout.setExpanded(false);
            } else {
                appBarLayout.setExpanded(true);
            }
        }
        return super.dispatchTouchEvent(ev);
    } catch (Exception e) {
        Log.e(TAG, "dispatchTouchEvent " + e.toString());
        return false;
    }
}

它获取 ACTION_UP 事件并仅在此时检查 CollapsingToolbarLayout 是否高于其高度的一半。

编辑:已过时,请参阅此回复

于 2015-09-03T15:41:20.923 回答