【问题标题】:Toolbar and TabLayout don't hide when I scroll the RecyclerView up当我向上滚动 RecyclerView 时,工具栏和 TabLayout 不会隐藏
【发布时间】:2020-08-21 15:18:06
【问题描述】:

当我向上滚动时,我无法隐藏 ToolbarTabLayout。我有 3 个不同的 xml 文件:1)Toolbar,2)TabLayoutFragment(这里我有 TabLayoutViewPager,我在这里包含 toolbar,以及 3) HomeFragment(包含RecyclerView)。我需要在向上滚动时隐藏Toolbar,而且我在许多其他帖子中看到大多数人使用CoordinatorLayout 而不是Relative LayoutLinear Layout,然后他们必须添加app:layout_scrollFlags="scroll|enterAlways"我已经完成了,但是当向上滚动 RecyclerView 时,我仍然无法隐藏 Toolbar

我也将此添加到RecyclerView,但仍然没有...app:layout_behavior="@string/appbar_scrolling_view_behavior"

有人能指出这里缺少什么吗?

工具栏

<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar_events"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#fff"
    android:fitsSystemWindows="true">

    <com.google.android.material.appbar.AppBarLayout
        android:id="@+id/bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <androidx.appcompat.widget.Toolbar
            android:id="@+id/toolbar_home_fragment"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#fff"
            app:contentInsetEnd="0dp"
            app:contentInsetLeft="0dp"
            app:contentInsetRight="0dp"
            app:contentInsetStart="0dp"
            app:contentInsetStartWithNavigation="0dp"
            app:layout_scrollFlags="scroll|enterAlways"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerHorizontal="true"
                    android:layout_centerVertical="true"
                    android:fontFamily="@font/scriptbl"
                    android:text="Events"
                    android:textColor="@color/colorBlack"
                    android:textSize="60sp" />

                <ImageView
                    android:id="@+id/search"
                    style="@style/SelectableIconThemeBackground"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentEnd="true"
                    android:layout_centerVertical="true"
                    android:layout_marginEnd="10dp"
                    android:contentDescription="@string/camera"
                    android:padding="10dp"
                    android:src="@drawable/icon_search" />

                <ImageView
                    android:id="@+id/filter"
                    style="@style/SelectableIconThemeBackground"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerVertical="true"
                    android:layout_toStartOf="@+id/search"
                    android:contentDescription="@string/camera"
                    android:padding="10dp"
                    android:src="@drawable/icon10_sort" />

                <ImageView
                    android:id="@+id/options"
                    style="@style/SelectableIconThemeBackground"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_alignParentStart="true"
                    android:layout_centerVertical="true"
                    android:layout_marginStart="10dp"
                    android:contentDescription="@string/options"
                    android:padding="10dp"
                    android:src="@drawable/icon_short_text" />

            </RelativeLayout>

        </androidx.appcompat.widget.Toolbar>

    </com.google.android.material.appbar.AppBarLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

TabLayoutFragment

<LinearLayout 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:id="@+id/fragment_home_tab_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:tag="Home"
    tools:context=".Fragment.TabLayoutFragment">

    <include
        android:id="@+id/toolbar_events"
        layout="@layout/toolbar_events" />

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginBottom="8dp"
        android:background="#fff"
        app:layout_scrollFlags="scroll|enterAlways"
        app:tabIndicatorColor="#000"
        app:tabIndicatorFullWidth="false"
        app:tabRippleColor="@android:color/transparent"
        app:tabSelectedTextColor="@color/colorBlack"
        app:tabTextColor="@color/colorBlack" />

    <androidx.viewpager.widget.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

</LinearLayout>

HomeFragment

<RelativeLayout 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:id="@+id/fragment_home"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical"
    android:tag="fragment_home"
    tools:context=".Fragment.HomeFragment">

    <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
        android:id="@+id/refresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@+id/toolbar">

            <TextView
                android:id="@+id/welcome"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="100dp"
                android:gravity="center"
                android:text="Welcome to Events!"
                android:textColor="#d9d9d9"
                android:textSize="36sp"
                android:visibility="gone" />

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/location"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:drawablePadding="5dp"
                    android:gravity="center_horizontal"
                    android:padding="8dp"
                    app:drawableStartCompat="@drawable/icon_loc" />

                <androidx.recyclerview.widget.RecyclerView
                    android:id="@+id/recycler_view"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_below="@+id/location"
                    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

            </RelativeLayout>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycler_view_following"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:visibility="gone"
                app:layout_behavior="@string/appbar_scrolling_view_behavior" />

        </RelativeLayout>

    </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

</RelativeLayout>

【问题讨论】:

  • app:layout_behavior 需要 Coordinator 布局作为父级布局,其中包含您的工具栏,然后只有您的工具栏才能了解它需要隐藏的布局滚动。
  • @SophiaGray 好的,所以我将它的父布局设置为 coordinatorLayout... 其他一切都应该保持原样吗?

标签: java android toolbar android-tablayout


【解决方案1】:

您可以通过添加addOnScrollListener 方法以编程方式实现。

RecyclerView.SCROLL_STATE_DRAGGING 方法中隐藏工具栏和 TabLayout,在 RecyclerView.SCROLL_STATE_IDLE 方法中,如果您想再次显示它们,可以再次显示。

你可以这样试试:

recyclerview.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
    if (newState == RecyclerView.SCROLL_STATE_IDLE) {
        // Show your view again.. If you want to show them..
    } else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
        // Hide your view..
    }

    super.onScrollStateChanged(recyclerView, newState);

}});

或者您可以使用回收站视图的addOnScrollListener 方法:

参考:addOnScrollListener

recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
    if (dy > 0) {
        //Scrolling down
        // Show your controllers from here
    } else if (dy < 0) {
        //Scrolling up
        // Hide your controllers from here
    }
}});

此外,您可以在其中添加一些动画来显示和隐藏您的工具栏和选项卡布局。

【讨论】:

  • 您好,感谢您的回复。我应该在我的 TabLayoutFragment 中执行此操作吗?我假设...
  • 你可以使用你的父 Activity 的一个实例,并像这样使用它: MainActivity.getInstance().TabLayout.setVisibility(View.GONE);
  • 好的,我这样做了,但它的工作原理很奇怪。当你滚动TabLayout 时它看起来并不吸引人,它消失了,然后当它空闲时它又出现了。它看起来一点也不吸引人。是否还有另一种“状态”,向上滚动时消失,向下滚动时重新出现?
  • 对于向上滚动和向下滚动事件,您也可以检查:developer.android.com/reference/androidx/recyclerview/widget/… 或考虑下一条评论中的示例。
  • recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { if (dy > 0) { //向下滚动 } else if ( dy
【解决方案2】:

将工具栏和tablayout放在ScrollView组内,即可得到滚动部分。

<ScrollView>
   <Toolbar></Toolbar>
   <Tablayout></Tablayout>
</ScrollView>

【讨论】:

  • 我应该将 TabLayoutFragment 中的 LinearLayout 更改为 ScrollView 吗?
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2016-05-18
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多