来来来,先看下效果图~

这里有同学可能就已经想到了,这个不就是折叠式的toolbar实现的吗?对啊,我确实是这么做的,还是挺简单的,今天就给大家分享下code了,不过中间也遇到了些小插曲,比如:Toolbar上的文字不居中,分类不可点击等等。老规矩先上代码,跟着代码来分析总结。

布局文件

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/darkGrayBg"

android:fitsSystemWindows="true"

android:orientation="vertical">

android:id="@+id/title"

layout="@layout/toolbar_title_layout"/>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true">

android:id="@+id/appBarLayout"

android:layout_width="match_parent"

android:layout_height="256dp"

android:fitsSystemWindows="true"

android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

android:id="@+id/collapsingToolbarLayout"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="@color/darkGrayBg"

android:fitsSystemWindows="true"

app:contentScrim="@color/darkGrayBg"

app:expandedTitleMarginEnd="64dp"

app:expandedTitleMarginStart="48dp"

app:layout_scrollFlags="scroll|exitUntilCollapsed">

android:id="@+id/sortToolbar"

android:layout_width="match_parent"

android:layout_height="@dimen/dimen_40"

android:fitsSystemWindows="true"

app:contentInsetLeft="0dp"

app:contentInsetStart="0dp"

app:layout_collapseMode="pin"

app:popupTheme="@style/ThemeOverlay.AppCompat.Light">

android:id="@+id/sortToolbar_title"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:gravity="center"

android:textColor="@color/white"

android:textSize="@dimen/font_size_14"/>

android:id="@+id/filter_sort_list"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:fitsSystemWindows="true"

app:layout_collapseMode="none"

app:layout_collapseParallaxMultiplier="0.7"/>

android:id="@+id/filter_sort_result_list"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

android:id="@+id/load_result_view"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

注意:

1、布局结构必须是CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar,否则无效果哦,这几个控件在前面的博客中我们详细为大家讲解过了,可以参考博客:

Materail Design 入门(八)——CollapsingToolbarLayout的使用方法

Materail Design 入门(七)——AppBarLayout的使用方法

Materail Design 入门(四)——Toolbar的使用方法(1)

2、CollapsingToolbarLayout中Toolbar和VpRecyclerView的顺序不能反了,否则,Recyclerview将不能点击,因为Toolbar将会覆盖在Recyclerview上方,导致Recyclerview点击事件不响应。

3、因为直接使用Toolbar,Toolbar的文字内容不居中,所以在Toolbar中嵌套TextView解决文字居中问题。

4、 app:contentInsetLeft=”0dp”

app:contentInsetStart=”0dp”

使Toolbar的内容居中

Java代码

private void initView() {

setTitle(getString(R.string.filter));

mAppBarLayout.addOnOffsetChangedListener(new AppBarStateChangeListener() {

@Override

public void onStateChanged(AppBarLayout appBarLayout, State state) {

Log.d("STATE", state.name());

if (state == State.EXPANDED) { //展开状态

mSortToolbarTitle.setText("");

mFilterSortList.setVisibility(View.VISIBLE);

} else if (state == State.COLLAPSED) {//折叠状态

mSortToolbarTitle.setText(mFilterSortAdapter.getSortKey());

mFilterSortList.setVisibility(View.GONE);

} else { //中间状态

mSortToolbarTitle.setText("");

mFilterSortList.setVisibility(View.VISIBLE);

}

}

});

mFilterSortList.setLayoutManager(new LinearLayoutManager(this));

mFilterSortList.addItemDecoration(new RecycleViewDivider(this, R.drawable.line_divier));

mFilterSortList.setHasFixedSize(true);

mFilterSortAdapter = new FilterSortAdapter(this);

mFilterSortList.setAdapter(mFilterSortAdapter);

mFilterSearchtList.setLayoutManager(new GridLayoutManager(this, 3, GridLayoutManager

.VERTICAL, false));

mFilterSearchtList.setHasFixedSize(true);

mFilterSearchAdapter = new FilterSearchAdapter(this);

mFilterSearchtList.setAdapter(mFilterSearchAdapter);

mFilterSearchtList.setLoadingListener(new VpRecyclerView.LoadingListener() {

@Override

public void onRefresh() {

loadType = VpRecyclerView.REFRESH;

start = 0;

filterSearch();

}

@Override

public void onLoadMore() {

loadType = VpRecyclerView.LOADMORE;

start++;

filterSearch();

}

});

}

布局文件写对了基本上就完成了一大半了,java代码还是比较简单的,就是给标题和Recyclerview初始化赋值。这里需要注意的是何时展开Recyclerview何时折叠Recyclerview。这里我们给AppBarLayout添加一个监听事件:addOnOffsetChangedListener。根据他的state来控制Recyclerview的折叠和展开。

好了,讲解完了,本篇的目的还在于CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout+Toolbar的练习和应用哦。

android如何实现筛选功能,Android——仿优酷节目筛选功能实现相关推荐

  1. android仿疯狂猜图源码,Android开发实现高仿优酷的客户端图片左右滑动切换功能实例【附源码下载】...

    本文实例讲述了Android开发实现高仿优酷的客户端图片左右滑动切换功能.分享给大家供大家参考,具体如下: 本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和 ...

  2. android仿优酷菜单,Android编程实现仿优酷旋转菜单效果(附demo源码)

    本文实例讲述了Android编程实现仿优酷旋转菜单效果.分享给大家供大家参考,具体如下: 首先,看下效果: 不好意思,不会制作动态图片,只好上传静态的了,如果谁会,请教教我吧. 首先,看下xml文件: ...

  3. 高仿优酷Android客户端图片左右滑动(自动切换)

    本例是用ViewPager去做的实现,支持自动滑动和手动滑动,不仅优酷网,实际上有很多商城和门户网站都有类似的实现: 具体思路: 1. 工程中需要添加android-support-v4.jar,才能 ...

  4. Android 高仿优酷旋转菜单

    这是一个很早版本的优酷菜单,效果挺不错的,实现起来也挺简单的.废话不说,直接上代码: 首先是xml文件: <RelativeLayout xmlns:android="http://s ...

  5. Android仿优酷视频的悬浮窗播放

    Android仿优酷视频的悬浮窗播放 之前接了需求要让视频播放时可以像优酷视频那样在悬浮窗里播放,并且悬浮窗和主播放页面之间要实现无缝切换,项目中使用的是自封装的ijkplayer 这个要求就代表不能 ...

  6. android 优酷 自动全屏播放,Android如何实现仿优酷视频的悬浮窗播放效果

    Android如何实现仿优酷视频的悬浮窗播放效果 发布时间:2020-07-11 10:24:43 来源:亿速云 阅读:228 作者:清晨 这篇文章主要介绍Android如何实现仿优酷视频的悬浮窗播放 ...

  7. android浮窗播放器,Android仿优酷视频的悬浮窗播放效果

    之前接了需求要让视频播放时可以像优酷视频那样在悬浮窗里播放,并且悬浮窗和主播放页面之间要实现无缝切换,项目中使用的是自封装的ijkplayer 这个要求就代表不能在悬浮窗中新建视频控件,所以需要在悬浮 ...

  8. Android开发(17)-通过安卓API的Tabs3实现仿优酷tabhost效果

    课程还没有讲了多少,前两天老师就让自己写个视频播放器客户端,这个是他上课讲的一个小小demo,通过查看安卓API的tabs3,实现仿优酷视频客户端的tabhost效果.我的API路径是D:\andro ...

  9. Android Tv端仿优酷酷喵——播放界面下拉弹出选项窗

    自己写了一个Andorid TV端动画实例,主要是仿优酷酷喵里的下拉弹窗的效果,如下图: 这里把弹框写成了一个弹出的dialog,把dialog的背景设成黑色半透明,然后在activity中监听下键弹 ...

最新文章

  1. Content-Type 知识 介绍
  2. Java项目:网上水果蔬菜项目系统设计和实现(java+springboot+mysql+ssm)
  3. android 代码混淆 gson,Android RecyclerView和Gson混淆问题
  4. Centos mysql的安装和配置
  5. NSMutableParagraphStyle /NSParagraphStyle
  6. include(),include_once(),requice(),require_once()的区别
  7. Qt没有被正确安装,请运行make install问题的解决
  8. Spark Core
  9. TigerGraph持续产品创新,发布最新的“全民图”版本
  10. C++头文件,预处理详解
  11. Javascript学习数据结构--集合(Set实现)
  12. CODE:BLOCK中的CreateProcess: No such file or directory
  13. spring boot项目Intellij 打包
  14. 微软 azure_Microsoft Azure,我们迁移数据的第一步
  15. 通过zabbix_sender实现批量传递key值
  16. 网络是怎样连接的_户根勤(带目录)
  17. java 动画 制作_DragonBones简单动画制作实例
  18. iNFTnews|Web3走进FIFA世界杯
  19. android大作业报告总结,android大作业总结报告.doc
  20. 周鸿祎带头,十家安全公司接受了这些尖锐拷问

热门文章

  1. excel排版成印刷版格式:批量转换成pdf
  2. mac os上onenote深色模式dark mode如何开启 2019
  3. delphi真的穷途末路了! 不变程序员的苦难和热爱的精神。
  4. python怎么写自己的名字_用python写一个序列图改名工具
  5. css 炫酷鎏金字体,颜色渐变
  6. plsql因目标主机或对象不存在_原创 | 由勒索软件谈起:重新审视工业信息安全,要从工业主机开始...
  7. Python之迭代器、装饰器、软件开发规范
  8. 南京航空航天大学计算机学院研究生,南京航空航天大学计算机学院2016研究生推免办法...
  9. 使用html+css实现一个静态页面(厦门旅游网站制作6个页面) 旅游网页设计制作 HTML5期末考核大作业,网站——美丽家乡。 学生旅行 游玩 主题住宿网页
  10. 苹果AirPods爆炸,跑步听歌很慌,别炸