尴尬的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 ...
随机推荐
- iOS_3_图片浏览
终于效果图: BeyondViewController.h // // BeyondViewController.h // 03_图片浏览 // // Created by beyond on 14- ...
- 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js
iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这 ...
- win10中如何成功安装lxml
lxml官网地址:http://lxml.de/index.html 问题: 在学习lxm的时候,发现在win10下总是安装失败,如下: 在网上搜索了半天也没找到具体的解决方案,就FQgoogle下, ...
- 计算点与x轴正半轴夹角atan2(double y,double x),返回弧度制(-PI,PI]
精度比acos , asin 什么的高些. Parameters y Value representing the proportion of the y-coordinate. x Value re ...
- Java使用jmagick处理图片遇到的异常
java通过ImageMagick处理图片遇到问题: 下面异常都是我一个一个遇到的: 异常1: Exception in thread "main" java.lang.Unsat ...
- EasyPlayer RTSP播放器运行出现: Unable to load DLL 找不到指定的模块。exception from HRESULT 0x8007007E 解决方案
最近有EasyPlayer RTSP播放器的开发者反馈,在一台新装的Windows Server 2008的操作系统上运行EasyPlayer RTSP播放器出现"Unable to loa ...
- elasticsearch从入门到出门-02-简单的CRUD
操作背景: 电商网站上面的一个商品的增删改查: es 能接受的都是JSON格式的数据 Es 提供了一套简单的集群信息健康监控的api GET /_cat/health?v epoch t ...
- Residual (numerical analysis)
In many cases, the smallness of the residual means that the approximation is close to the solution, ...
- php建立一个空类: stdClass
$pick = new stdClass; $pick->type = 'full'; ;
- shell脚本调试运行
1.在命令行提供参数:$sh -x script.sh 但是有的shell脚本只能用 ./xxx.sh的方式运行,不能用sh命令解析执行.则此方法会报错.2.脚本开头提供参数:#!/bin/sh ...