滚动隐藏后以编程方式显示工具栏(Androiddevise库)

我有以下布局:一个抽屉,主要内容视图有一个AppBarLayout,RecyclerView和一个TextView。 当我滚动回收站时,工具栏被正确隐藏。

不过,我有一个用例:当所有来自回收站的物品都被移除时,我将其可见性设置为“去”,而将TextView设置为显示相应的消息。 如果这是在隐藏工具栏的情况下完成的,则用户不可能再次看到工具栏。

是否有可能以编程方式导致工具栏被完全显示? 每当显示TextView而不是RecyclerView时,我都会这样做。

这是我的布局:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout android:id="@+id/drawer_layout" 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:layout_width="match_parent" android:layout_height="match_parent" android:animateLayoutChanges="true"> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.design.widget.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:layout_scrollFlags="scroll|enterAlways"/> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/test_list" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> <TextView android:id="@+id/empty_test_list_info_label" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:padding="@dimen/spacing_big" android:textAppearance="?android:attr/textAppearanceLarge" android:visibility="gone"/> </android.support.design.widget.CoordinatorLayout> <RelativeLayout android:layout_width="280dp" android:layout_height="match_parent" android:layout_gravity="start" android:background="?android:attr/windowBackground" android:elevation="10dp"/> </android.support.v4.widget.DrawerLayout> 

顺便说一句,如果我把AppBarLayour放在RecyclerView之后,就像所有的教程都显示它一样,它会隐藏列表中最顶端的项目。 只有在它上面时才能正常工作。

Solutions Collecting From Web of "滚动隐藏后以编程方式显示工具栏(Androiddevise库)"

你可以通过访问包含你的工具栏的AppBarLayout来完成

这里是一个例子:

 if (mToolbar.getParent() instanceof AppBarLayout){ ((AppBarLayout)mToolbar.getParent()).setExpanded(true,true); } 

setExpanded(展开,animation)将完成这项工作。 您也可以引用AppBarLayout,而不是从工具栏中调用getParent。

你可以做toolbar.transitionY(int y); 在滚动方法或使用可视性消失,你必须在列表视图或回收利用工具栏的大小添加一个标题。 这样整个列表仍然显示

您需要将RecyclerView标题放到AppBarLayout的高度。 也就是说,在RecyclerView的位置0处,您需要添加标题,然后添加其他元素。

如果你想强制显示Toolbar ,实际上AppBarLayoutAppBarLayout依赖视图的顶部和底部偏移(它被称为行为)。 你需要保持AppBarLayout的高度的参考,因为我们知道高度是视图Rect 顶部和底部之间的距离。

假设你的AppBarLayout只保留一个Toolbar

 int mAppBarLayoutHeight = mAppBarLayout.getBottom() - mAppBarLayout.getTop(); //initial, normal height private void showToolbar(){ if(this.mAnimator == null) { this.mAnimator = new ValueAnimator(); this.mAnimator.setInterpolator(new DecelerateInterpolator()); this.mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int animatedOffset = (int) animation.getAnimatedValue(); mToolbar.offsetTopBottom(animatedOffset/2); } }); } else { this.mAnimator.cancel(); } this.mAnimator.setIntValues(0, mAppBarLayoutHeight); this.mAnimator.start(); }