英文:
Toolbar and TabLayout don't hide when I scroll the RecyclerView up
问题
我在向上滚动时遇到了隐藏Toolbar
和TabLayout
的问题。我有3个不同的xml文件:1) Toolbar
,2) TabLayoutFragment
(这里有TabLayout
和ViewPager
,并且我在这里include了toolbar
),以及3) HomeFragment
(包含RecyclerView
)。我需要在向上滚动时隐藏Toolbar
,我已经看到许多其他帖子中大多数人使用CoordinatorLayout
而不是Relative Layout
或Linear Layout
,然后他们必须添加app:layout_scrollFlags="scroll|enterAlways"
,我也已经添加了这个,但是我仍然无法使RecyclerView
向上滚动时隐藏Toolbar
。
我还在RecyclerView
中添加了以下内容,但仍然没有效果... app:layout_behavior="@string/appbar_scrolling_view_behavior"
。
有人可以指出这里缺少什么吗?
Toolbar
<!-- 这里是Toolbar的代码 -->
TabLayoutFragment
<!-- 这里是TabLayoutFragment的代码 -->
HomeFragment
<!-- 这里是HomeFragment的代码 -->
(请注意,上述内容是您提供的代码的翻译,仅包含所需的翻译部分。)
英文:
I am having trouble getting the Toolbar
and TabLayout
to hide when I scroll up. I have 3 different xml files: 1) Toolbar
, 2) TabLayoutFragment
(here I have the TabLayout
and ViewPager
, and I include the toolbar
here, and 3) HomeFragment
(contains the RecyclerView
). I need for the Toolbar
to hide when I scroll up, and I have seen in many other posts that most people use a CoordinatorLayout
instead of a Relative Layout
or Linear Layout
, and then they have to add app:layout_scrollFlags="scroll|enterAlways"
which I have done, but I still can't get the Toolbar
to hide when scrolling the RecyclerView
up.
I've also added this to the RecyclerView
, but still nothing... app:layout_behavior="@string/appbar_scrolling_view_behavior"
Could someone point out what is missing here?
Toolbar
<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>
答案1
得分: 3
你可以通过添加 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) {
// 如果你想要显示它们,可以在这里显示你的视图
} else if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
// 在这里隐藏你的视图
}
super.onScrollStateChanged(recyclerView, newState);
}
});
或者你可以使用 RecyclerView 的 addOnScrollListener
方法:
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
if (dy > 0) {
// 向下滚动
// 从这里显示你的控件
} else if (dy < 0) {
// 向上滚动
// 从这里隐藏你的控件
}
}
});
此外,你还可以在这里添加一些动画来显示和隐藏你的工具栏和选项卡布局。
英文:
You can make it programmatically by adding the addOnScrollListener
method.
On the RecyclerView.SCROLL_STATE_DRAGGING
method hide the toolbar and TabLayout and on RecyclerView.SCROLL_STATE_IDLE
method you can show it again if you want to show them again.
You can try it in such way:
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);
}});
Or You can use recycler view's addOnScrollListener
method:
Refer: 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
}
}});
Also, you can add some animations there to show and hide your toolbar and tab layouts.
答案2
得分: 0
<ScrollView>
<Toolbar></Toolbar>
<Tablayout></Tablayout>
</ScrollView>
英文:
Place the toolbar and the tablayout within the ScrollView group to get the scrolling part.
<ScrollView>
<Toolbar></Toolbar>
<Tablayout></Tablayout>
</ScrollView>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论