RecyclerView中滑动状态下对toolbar的隐藏和显示
来源:互联网 发布:淘宝宝贝详情教程 编辑:程序博客网 时间:2024/05/20 09:25
思路
在RecyclerView中,通过获取当前第一个可见item的位置,从而来自定义出要求改变toolbar状态的位置,只需要通过距离的判断,就可以轻松设置toolbar的显示与隐藏。
设置自定义toolbar
<!-- Base application theme. --><style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- Customize your theme here. --> <item name="colorPrimary">@color/colorPrimary</item> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <item name="colorAccent">@color/colorAccent</item></style>
首先,我们在values文件夹下面的style.xml文件中选择“Theme.AppCompat.Light.NoActionBar“,即关闭系统默认的actionbar,然后再自定义一个toolbar。
<android.support.design.widget.AppBarLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:visibility="gone" android:background="#7effffff"/></android.support.design.widget.AppBarLayout>
此时toolbar中的visibility属性选择gone,即活动进行时,我们默认隐藏toolbar。然后在MainAvtivity中找到这个控件并且设置。
toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); ActionBar actionBar = getSupportActionBar(); actionBar.setDisplayHomeAsUpEnabled(true);
RecyclerView中获取当前位置
相比ListView,RecyclerView中如果想获取第一个和最后一个可见item的位置,需要借助LinearLayoutManager。
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); View c=recyclerView.getChildAt(0); //得到RecyclerView中的0号元素 RecyclerView.LayoutManager layoutManager=recyclerView.getLayoutManager(); //判断是当前layoutManager是否为LinearLayoutManager // 在recyclerView中只有LinearLayoutManager才有查找第一个和最后一个可见view位置的方法 if(layoutManager instanceof LinearLayoutManager){ LinearLayoutManager linearManager=(LinearLayoutManager) layoutManager; int firstItemPosition = linearManager.findFirstVisibleItemPosition(); //获取第一个可见view的位置 int top = c.getTop(); //获取第0个元素到页面顶部的距离 float scale = getApplication().getResources().getDisplayMetrics().density; int dpvalue = (int) (20 * scale + 0.5f); int pxvalue = c.getHeight() - dpvalue; //通过计算,将单位dp转化为像素px,pxvalue即为toolbar状态改变的位置 if (-top + firstItemPosition * c.getHeight() < pxvalue) { toolbar.setVisibility(View.VISIBLE); } else { toolbar.setVisibility(View.GONE); } } } });
总结
在RecyclerView中,当前可见的第一个item的位置不能直接得到,而是要通过LinearLayoutManager对象中的方法得到,而在确定toolbar状态改变的位置时,需要进行单位转换,因为xml文件中距离是以dp为单位,而在实际界面中是以px为单位,因此如果需要确定准确的位置时,应当参考以上的转换方法。
阅读全文
1 0
- RecyclerView中滑动状态下对toolbar的隐藏和显示
- RecyclerView 滑动隐藏,显示ToolBar
- CoordinatorLayout、Toolbar、TabLayout、AppBarLayout和RecyclerView组合可以滑动收起或显示Toolbar的demo
- CoordinatorLayout 与ToolBar 和Fab实现滑动隐藏和显示的学习笔记
- RecyclerView上拉隐藏Toolbar,下拉显示
- Android开发之实现滑动RecyclerView,浮动按钮的显示和隐藏(一)
- Android开发之实现滑动RecyclerView,浮动按钮的显示和隐藏(二)
- 上下滑动toolBar不会正常显示隐藏
- fragment中实现listView的滑动隐藏toolbar
- Tablayout和ViewPager的结合使用及滑动RecycleView隐藏显示Toolbar和右下角的悬浮窗
- Toolbar在WebView滚动下的显示和隐藏的实现
- 让 Toolbar 随着 RecyclerView 的滚动而显示/隐藏(Part 1)
- 让 Toolbar 随着 RecyclerView 的滚动而显示/隐藏(Part 1)
- CoordinatorLayout_Behavior控制Toolbar&Fab的显示和隐藏
- WebView滑动隐藏toolbar
- JavaScript对select中option的隐藏和显示操作
- android studio checkbox隐藏和显示在recyclerview中
- Android list列表滑动显示隐藏toolbar(ListView)
- Android解析ClassLoader(一)Java中的ClassLoader
- Jacobian矩阵和Hessian矩阵
- Makefile编译时怎么打印出变量值
- x的平方根
- php脚本#!/usr/bin/env php 脚本声明
- RecyclerView中滑动状态下对toolbar的隐藏和显示
- 数位DP
- NumPy中文手册
- Sqoop配置安装
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 算法练习第一周(基础练习,简单排序)
- c++中抽象类
- Headmaster's Headache UVA
- ubuntu14或Ubuntu16 下 源码配置、编译安装Lnmp环境