尴尬的app:layout_scrollFlags="scroll|enterAlways" 配合NavigationDrawer
昨天想到了NavigationDrawer中Item点击的问题。
点击Drawer中的一个Item需要到一个新的页面,你是应该打开一个新的Activity呢还是直接用fragment呢?
如果打开新的activity,那么新的Activity覆盖,Drawer按钮就会消失;当然你也可以在新的Activity上加同样的NavigationDrawer,但是那样太浪费资源了。
但如果你用fragment,那么你只需要ToolBar下面的区域,整个作为一个可替换的container,然后不同的fragment进行replace就行了。很多App都是这样做的,比如Google+,比如知乎等等,这样他们在切换左侧的Drawer Item的时候,只需要replace container(不要忘了把fragment入栈)。
可是,如果你的App有一个ViewPager(FragmentPagerAdapter)呢?
通常情况,AppBarLayout会包含widget.Toolbar和TabLayout。
其实也是可以的,只需要把ToolBar下面的区域抽离出来(这样我们就必须把TabLayout从AppBarLayout里面抽出来),作为fragment的container就行了,然后在MainActivity启动的时候启动一个MainFragment,里面包含:
- tabLayout
- viewPager
唯独有一个问题:如果你的应用想要实现ToolBar的滚动时折叠,就像这样:

这样如果仅仅用一个Activity+多个Fragment,是不行的 。下面说一下为什么。
用一个Activity+多个Fragment意味着要有给fragments一个公共的container。
我的做法是,把ToolBar下面的区域提取出来了,如下,content_main是一个空白的layout,也就是container,activity启动时我可以往里面插入一个含有tabLayout和viewPager的fragment。不知道我的意思表达清楚没有。。

我唯一见到的app:layout_scrollFlags="scroll|enterAlways" 使用场景是在ToolBar标签中设置,与CoordinatorLayout配合对ToolBar进行滚动时隐藏。
app:layout_scrollFlags是AppBarLayout的属性。
AppBarLayout is a vertical
LinearLayoutwhich implements many of the features of material designs app bar concept, namely scrolling gestures.Children should provide their desired scrolling behavior through
setScrollFlags(int)and the associated layout xml attribute:app:layout_scrollFlags.This view depends heavily on being used as a direct child within a
CoordinatorLayout. If you use AppBarLayout within a differentViewGroup, most of it's functionality will not work.
尴尬的地方在于,如果你像我上面说的那样进行布局,你可以只用一个fragment实现NavigationDrawer,但你的ToolBar将不能滚动收缩。为什么呢?大概是因为上图的content_main本身不具有滚动属性了,就像ListView不能在CoordinatorLayout实现ToolBar的滚动隐藏一样。
G+、知乎等应用,首页没有ViewPager。酷安网客户端的首页有ViewPager,所以也在Item中用了独立Activity(起初我还以为是酷安的开发在偷懒-_-)。所以我还是决定采用类似酷安的方案了。
啊 浪费了好多时间。
5月1日于无线楼
尴尬的app:layout_scrollFlags="scroll|enterAlways" 配合NavigationDrawer的更多相关文章
- app:layout_scrollFlags不起作用
http://stackoverflow.com/questions/31722798/enteralwayscollapsed-does-not-bring-back-the-toolbar-whe ...
- MUI开发APP,scroll组件,运用到区域滚动
最近在开发APP的过程中,遇到一个问题,就是内容有一个固定的头部和底部. 头部就是我们常用的header了,底部的话,就放置一个button,用来提交页面数据或者进入下一个页面等,效果 ...
- 安卓Design包之CoordinatorLayout配合AppBarLayout,ToolBar,TabLaout的使用
转载: CoordinatorLayout配合AppBarLayout,Toolbar和TabLayout的使用 控件的简单介绍: AppBarLayout:它是继承LinerLayout实现的一个V ...
- 带你实现开发者头条APP(四)---首页优化(加入design包)
title: 带你实现开发者头条APP(四)---首页优化(加入design包) tags: design,Toolbar,TabLayout,RecyclerView grammar_cjkRuby ...
- 【转】【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
转自:http://mrfufufu.github.io/android/2015/07/01/Codelab_Android_Design_Support_Library.html [翻]Andro ...
- Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏
原文:Codelab for Android Design Support Library used in I/O Rewind Bangkok session--Make your app fanc ...
- 基于MaterialDesign设计风格的妹纸app的简单实现
代码地址如下:http://www.demodashi.com/demo/11644.html *今天看了郭神的第二行代码,深深的被MaterialDesign的设计风格所吸引,然后就照例做了一个小D ...
- TouTiao开源项目 分析笔记4==>一个简单APP 整体常用框架
1.效果预览 1.1.如下图所以,到目前为止所有的功能. 2.从InitApp开始->SplashActivity->MainActivity 2.1.InitApp源代码.这是整个项目的 ...
- Android -- 案例学习积累
Theme ActionBar / ToolBar android.support.design.widget.CollapsingToolbarLayout android.support.desi ...
随机推荐
- unity中动态生成网格
以下是绘制正方形面片的一个例子,方便之后查阅: 效果如图所示: 红轴为x方向,蓝轴为z方向. 代码如下: using System.Collections; using System.Collecti ...
- hdu 5881 Tea (2016 acm 青岛网络赛)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5881 Tea Time Limit: 3000/1000 MS (Java/Others) Me ...
- hdu 5285 wyh2000 and pupil(二染色)
第一次用vector解得题.值得纪念,这道题是二染色问题,我用bfs解得.就是染色,推断,计数问题,其 实挺简单的,就是得判一下特殊情况,当n<2的时候就不能有解,由于题目要求每一个组至少有一个 ...
- 批量删除redis某个键值
/usr/local/redis/src/redis-cli -h 172.28.6.23 -p 6383 keys "virtual*" |xargs /usr/local/r ...
- Jaxb2 实现JavaBean与xml互转
一.简介 JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术.该过程中,JAXB也提供了将XML实 ...
- 微信H5支付开发步骤总结
* 开发步骤: * 1.在微信公众号平台设置授权目录,即jsapi.php所在的目录 * 2.在微信支付平台下载证书,放到cert目录 * 3.在微信支付平台设置API秘钥,同时在WxPay.Conf ...
- jmeter--基于http+json接口的功能测试
jmeter--基于http+json接口的功能测试 测试项目叫做smile_task,简称sm_task.这是一个基于nodejs超简单的todo list,sm_task没有任何UI界面(纯接口) ...
- PostMan的使用注意事项
1json格式要设置头尾application/json 2body中raw的{"userName":"123","passWord":&q ...
- 【网络与系统安全】关于SSL/TSL协议的分析
前言 TSL协议的前身是由网景(Netscape)公司于1994年研发的安全套接字(Secure Socket Layer)协议.它建立在TCP协议栈的传输层,用于保护面向连接的TCP通信.实际TSL ...
- JNDI知道这么多就够了!
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/sunshoupo211/article/details/37924017 JNDI 全称:Java ...