zoukankan      html  css  js  c++  java
  • 尴尬的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 LinearLayout which 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 different ViewGroup, most of it's functionality will not work.

     尴尬的地方在于,如果你像我上面说的那样进行布局,你可以只用一个fragment实现NavigationDrawer,但你的ToolBar将不能滚动收缩。为什么呢?大概是因为上图的content_main本身不具有滚动属性了,就像ListView不能在CoordinatorLayout实现ToolBar的滚动隐藏一样。

    G+、知乎等应用,首页没有ViewPager。酷安网客户端的首页有ViewPager,所以也在Item中用了独立Activity(起初我还以为是酷安的开发在偷懒-_-)。所以我还是决定采用类似酷安的方案了。

    啊 浪费了好多时间。

    5月1日于无线楼

  • 相关阅读:
    hdoj 1029
    喵哈哈村的魔法考试 Round #5 (Div.2) B
    喵哈哈村的魔法考试 Round #6 (Div.3) E
    喵哈哈村的魔法考试 Round #6 (Div.3) BC总结
    喵哈哈村的魔法考试 Round #7 (Div.2) E
    喵哈哈村的魔法考试 Round #7 (Div.2) C
    喵哈哈村的魔法考试 Round #7 (Div.2) B
    喵哈哈村的魔法考试 Round #7 (Div.2)
    Codeforces Round #402 (Div. 2) --- C. Dishonest Sellers
    Codeforces Round #402 (Div. 2)---B. Weird Rounding
  • 原文地址:https://www.cnblogs.com/larrylawrence/p/5450341.html
Copyright © 2011-2022 走看看