美文网首页ITBOXMobDevGroupAndroid控件篇
看,这个工具栏能伸缩折叠——Android Collapsing

看,这个工具栏能伸缩折叠——Android Collapsing

作者: 简名 | 来源:发表于2016-05-19 00:21 被阅读74849次

    我非常喜欢Material Design里折叠工具栏的效果,bilibili Android客户端视频详情页就是采用的这种设计。这篇文章的第二部分我们就通过简单的模仿bilibili视频详情页的实现来了解下CollapsingToolbarLayout的使用。文章的第三部分介绍了CollapsingToolbarLayout与TabLayout的组合使用。

    有基础的朋友可以直接跳过第一部分。

    一、相关基础属性介绍

    Android studio中有一个Activity模板叫ScrollingActivity,它实现的就是简单的可折叠工具栏,我们将此模板添加到项目中。


    ScrollingActivity.gif

    ScrollingActivity的布局代码如下

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:contentScrim="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" />
    
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    <android.support.v4.widget.NestedScrollView                    
            android:layout_width="match_parent"        
            android:layout_height="match_parent"              
            app:layout_behavior="@string/appbar_scrolling_view_behavior"
            >    
        <TextView        
                android:layout_width="wrap_content"        
                android:layout_height="wrap_content"        
                android:layout_margin="@dimen/text_margin"         
                android:text="@string/large_text" />     
    </android.support.v4.widget.NestedScrollView>
    
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end" />
    
    </android.support.design.widget.CoordinatorLayout>
    

    AppBarLayout是一种支持响应滚动手势的app bar布局(比如工具栏滚出或滚入屏幕),CollapsingToolbarLayout则是专门用来实现子布局内不同元素响应滚动细节的布局。

    与AppBarLayout组合的滚动布局(Recyclerview、NestedScrollView等)需要设置app:layout_behavior="@string/appbar_scrolling_view_behavior"(上面代码中NestedScrollView控件所设置的)。没有设置的话,AppBarLayout将不会响应滚动布局的滚动事件。

    CollapsingToolbarLayout和ScrollView一起使用会有滑动bug,注意要使用NestedScrollView来替代ScrollView。

    AppBarLayout的子布局有5种滚动标识(就是上面代码CollapsingToolbarLayout中配置的app:layout_scrollFlags属性):

    1. scroll:将此布局和滚动时间关联。这个标识要设置在其他标识之前,没有这个标识则布局不会滚动且其他标识设置无效。
    2. enterAlways:任何向下滚动操作都会使此布局可见。这个标识通常被称为“快速返回”模式。
    3. enterAlwaysCollapsed:假设你定义了一个最小高度(minHeight)同时enterAlways也定义了,那么view将在到达这个最小高度的时候开始显示,并且从这个时候开始慢慢展开,当滚动到顶部的时候展开完。
    4. exitUntilCollapsed:当你定义了一个minHeight,此布局将在滚动到达这个最小高度的时候折叠。
    5. snap:当一个滚动事件结束,如果视图是部分可见的,那么它将被滚动到收缩或展开。例如,如果视图只有底部25%显示,它将折叠。相反,如果它的底部75%可见,那么它将完全展开。

    CollapsingToolbarLayout可以通过app:contentScrim设置折叠时工具栏布局的颜色,通过app:statusBarScrim设置折叠时状态栏的颜色。默认contentScrim是colorPrimary的色值,statusBarScrim是colorPrimaryDark的色值。这个后面会用到。

    CollapsingToolbarLayout的子布局有3种折叠模式(Toolbar中设置的app:layout_collapseMode)

    1. off:这个是默认属性,布局将正常显示,没有折叠的行为。
    2. pin:CollapsingToolbarLayout折叠后,此布局将固定在顶部。
    3. parallax:CollapsingToolbarLayout折叠时,此布局也会有视差折叠效果。

    当CollapsingToolbarLayout的子布局设置了parallax模式时,我们还可以通过app:layout_collapseParallaxMultiplier设置视差滚动因子,值为:0~1。

    FloatingActionButton这个控件通过app:layout_anchor这个设置锚定在了AppBarLayout下方。FloatingActionButton源码中有一个Behavior方法,当AppBarLayout收缩时,FloatingActionButton就会跟着做出相应变化。关于CoordinatorLayout和Behavior,我下一篇文章会和大家一起学习。

    这一堆属性看着有点烦,大家可以新建一个ScrollingActivity模板去实验一下玩玩。

    二、模仿bilibili客户端视频详情页

    我们先对原界面分析一下。


    哔哩哔哩Android客户端视频详情页.gif

    界面初始,CollapsingToolbarLayout是展开状态,显示的是视频封面。我们向上滚动界面,CollapsingToolbarLayout收缩。当AppBarLayout完全折叠的时候视频av号隐藏,显示出来一个小电视图标和“立即播放”,点击则使AppBarLayout完全展开,CollapsingToolbarLayout子布局由ImageView切换为视频弹幕播放器。

    额...弹幕播放器...

    B站很早就开源了一个弹幕引擎,还起了个狂拽酷炫吊炸天的名字叫“烈焰弹幕使 ”(一看就是二次元程序猿们的作品→_→),源码在github上,项目名叫DanmakuFlameMaster

    来我们先看修改完成的布局。

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/coordinatorLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="@dimen/app_bar_height"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"
            app:statusBarScrim="@android:color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
    
            <!--封面图片-->
            <ImageView
                android:id="@+id/imageview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:src="@drawable/diqiu"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.7"
                android:fitsSystemWindows="true"/>
    
            <!--视频及弹幕控件-->
            <FrameLayout
                android:id="@+id/video_danmu"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.7"
                android:fitsSystemWindows="true"
                android:visibility="gone">
                <VideoView
                    android:id="@+id/videoview"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
    
                <!--哔哩哔哩开源的弹幕控件-->
                <master.flame.danmaku.ui.widget.DanmakuView
                    android:id="@+id/danmaku"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent" />
            </FrameLayout>
    
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin"
                app:popupTheme="@style/AppTheme.PopupOverlay" >
    
                <!--自定义带图片的立即播放按钮-->
                <android.support.v7.widget.ButtonBarLayout
                    android:id="@+id/playButton"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:gravity="center"
                    android:visibility="gone">
                    <ImageView
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_gravity="center_horizontal"
                        android:src="@mipmap/ic_play_circle_filled_white_48dp"/>
    
                    <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:textColor="#ffffff"
                        android:text="立即播放"
                        android:layout_gravity="center_vertical"
                       />
                </android.support.v7.widget.ButtonBarLayout>
    
            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    
    <include layout="@layout/content_scrolling" />
    
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/fab_margin"
        android:src="@mipmap/ic_play_circle_filled_white_48dp"
        app:layout_anchor="@id/app_bar"
        app:layout_anchorGravity="bottom|end" />
    
    </android.support.design.widget.CoordinatorLayout>
    

    我把colorPrimary的色值修改成了B站的“少女粉”,播放的图标是从网上找的。

    <color name="colorPrimary">#FA7199</color>
    

    因为我们要实现沉浸式状态栏,所以就需要先把整个activity设置成状态栏透明模式。然后在布局文件中,把CollapsingToolbarLayout里要实现沉浸式的控件设置上android:fitsSystemWindows="true",如果没有设置,则子布局会位于状态栏下方,未延伸至状态栏。

    布局并不算复杂,接下来先实现无弹幕播放时的功能,。

    我们需要监听CollapsingToolbarLayout的折叠、展开状态。唉我去,官方并没有提供现成的方法(⊙_⊙?)。

    查看源码,可以看到CollapsingToolbarLayout是通过实现AppBarLayout的OnOffsetChangedListener接口,根据AppBarLayout的偏移来实现子布局和title的视差移动以及ContentScrim和StatusBarScrim的显示。那么我们也可以通过调用AppBarLayout的addOnOffsetChangedListener方法监听AppBarLayout的位移,判断CollapsingToolbarLayout的状态。

    先写一个枚举定义出CollapsingToolbarLayout展开、折叠、中间,这三种状态。

     private CollapsingToolbarLayoutState state;
    
     private enum CollapsingToolbarLayoutState {
        EXPANDED,
        COLLAPSED,
        INTERNEDIATE
    }
    

    接下来对AppBarLayout进行监听,判断CollapsingToolbarLayout的状态并实现相应的逻辑。

    为了让大家对状态看着更直观,我在修改状态值的时候把title一起进行了修改。

    使用CollapsingToolbarLayout的时候要注意,在完成CollapsingToolbarLayout设置之后再调用Toolbar的setTitle()等方法将没有效果,我们需要改为调用CollapsingToolbarLayout的setTitle()等方法来对工具栏进行修改。(具体原因各位亲去看下CollapsingToolbarLayout源码就知道了 ( ˙-˙ ) )

        AppBarLayout  app_bar=(AppBarLayout)findViewById(R.id.app_bar);
        app_bar.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
            @Override
            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
    
                if (verticalOffset == 0) {
                    if (state != CollapsingToolbarLayoutState.EXPANDED) {
                        state = CollapsingToolbarLayoutState.EXPANDED;//修改状态标记为展开
                        collapsingToolbarLayout.setTitle("EXPANDED");//设置title为EXPANDED
                    }
                } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) {
                    if (state != CollapsingToolbarLayoutState.COLLAPSED) {
                        collapsingToolbarLayout.setTitle("");//设置title不显示
                        playButton.setVisibility(View.VISIBLE);//隐藏播放按钮
                        state = CollapsingToolbarLayoutState.COLLAPSED;//修改状态标记为折叠
                    }
                } else {
                    if (state != CollapsingToolbarLayoutState.INTERNEDIATE) {
                        if(state == CollapsingToolbarLayoutState.COLLAPSED){
                            playButton.setVisibility(View.GONE);//由折叠变为中间状态时隐藏播放按钮
                        }
                        collapsingToolbarLayout.setTitle("INTERNEDIATE");//设置title为INTERNEDIATE
                        state = CollapsingToolbarLayoutState.INTERNEDIATE;//修改状态标记为中间
                    }
                }
            }
        });
    

    然后对播放按钮设置监听,点击则调用AppBarLayout的setExpanded(true)方法使工具栏展开。


    CollapsingToolbarLayout状态监听演示.gif

    哔哩哔哩客户端的title是固定不动的,可以调用CollapsingToolbarLayout的setTitleEnabled(false)方法实现。

    视频播放时,调用 NestedScrollView的setNestedScrollingEnabled(false)方法可以使AppBarLayout不响应滚动事件。

    细心的朋友可能发现了哔哩哔哩客户端为了避免视频封面图片颜色过浅影响状态栏信息的显示,加了一个渐变的不透明层。

    实现渐变遮罩层很简单。先在res/drawable文件夹下新建了一个名为gradient的xml文件,其中代码如下:

    <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android">
    
        <gradient
            android:startColor="#33000000"
            android:endColor="#00000000"
            android:angle="270" />
    
    </shape>
    

    shape节点中,可以通过android:shape来设置形状,默认是矩形。gradient节点中angle的值270是从上到下,0是从左到右,90是从下到上。起始颜色#33000000是20%不透明度的黑色,#00000000表示全透明。

    然后在CollapsingToolbarLayout里的ImageView代码下面加上一个自定义view,背景设置为上面的渐变效果。

    <View
       android:layout_width="match_parent"
       android:layout_height="40dp"
       android:background="@drawable/gradient"
       android:fitsSystemWindows="true"
    />    
    

    一般状态栏的高度大概在20dp左右,我为了让渐变效果比较自然,并且不过多影响图(mei)片(zi),把高度设置成了40dp。(状态栏能看清了,妹子脸也没黑,挺好 (๑• . •๑) )

    有无渐变遮罩层的对比.jpg

    我省略了弹幕播放的相关实现,接下来只要在播放按钮监听中写出封面图片的隐藏、视频和弹幕弹幕控件的显示初始化及播放逻辑,在AppBarLayout的三种状态监听中根据是否视频在播放写出其他相应逻辑就好了,感兴趣的朋友可以下载哔哩哔哩的“烈焰弹幕使”源码DanmakuFlameMaster玩玩。

    B站点击追番或投硬币后会出现一个类似Snackbar的提示控件,可以通过我上一篇文章没时间解释了,快使用Snackbar!——Android Snackbar花式使用指南来实现,欢迎感兴趣的朋友去看看。

    模仿哔哩哔哩视频详情页.gif

    真的不是我懒得上代码了,真的…(基友:赶紧的,开黑了。 我:等等我,马上来!\(≧▽≦)/)

    三.CollapsingToolbarLayout与TabLayout

    CollapsingToolbarLayout与TabLayout组合使用的效果也不错。


    CollapsingToolbarLayout与TabLayout.gif

    来看下CollapsingToolbarLayout里的代码

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    
    <android.support.design.widget.AppBarLayout
        android:id="@+id/app_bar"
        android:layout_width="match_parent"
        android:layout_height="250dp"
        android:fitsSystemWindows="true"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:titleEnabled="false"
            android:fitsSystemWindows="true"
            app:contentScrim="@color/colorPrimary"
            app:statusBarScrim="@android:color/transparent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed|snap">
            <ImageView
                android:id="@+id/imageview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                android:adjustViewBounds="true"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.7"
                android:fitsSystemWindows="true"
                android:src="@drawable/girl2"/>
            <View
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:background="@drawable/gradient"
                android:fitsSystemWindows="true" />
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="96dp"
                android:minHeight="?attr/actionBarSize"
                android:gravity="top"
                app:layout_collapseMode="pin"
                app:title="hello"
                app:popupTheme="@style/AppTheme.PopupOverlay"
                app:titleMarginTop="15dp"
                />
            <android.support.design.widget.TabLayout
                android:id="@+id/tablayout"
                android:layout_width="match_parent"
                android:layout_height="45dp"
                android:layout_gravity="bottom" />
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
    
    
    <android.support.v4.view.ViewPager
        android:id="@+id/viewpage"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_behavior="@string/appbar_scrolling_view_behavior">
    </android.support.v4.view.ViewPager>
    
      </android.support.design.widget.CoordinatorLayout>
    

    TabLayout没有设置app:layout_collapseMode,在CollapsingToolbarLayout收缩时就不会消失。

    CollapsingToolbarLayout收缩时的高度是Toolbar的高度,所以我们需要把Toolbar的高度增加,给TabLayout留出位置,这样收缩后TabLayout就不会和Toolbar重叠。

    Toolbar的高度增加,title会相应下移。android:gravity="top"方法使Toolbar的title位于Toolbar的上方,然后通过app:titleMarginTop调整下title距顶部高度,这样Toolbar就和原来显示的一样了。


    CollapsingToolbarLayout还可以和Palette搭配使用,但是我感觉在实际使用中有些坑,因为CollapsingToolbarLayout中的图片不确定,Palette从图片中获取到的色彩很可能不是你想要的。

    感兴趣的朋友可以自己查下Palette的用法。

    就是这些。 []~( ̄▽ ̄)~*

    相关文章

      网友评论

      • Funny灬:有没有github链接啊?
      • Funny灬:写的很详细,又学到了,谢谢作者
      • 林灬:那个state是哪个啊,。。大佬们,谁来解释一下边,
      • 色之狼:视频播放时,调用 NestedScrollView的setNestedScrollingEnabled(false)方法可以使AppBarLayout不响应滚动事件。

        这一句里面指的 nestedscrollview 是 指appbarlayout下面的content部分吗?
      • bbd827ca5086:感谢感谢 正好要用到这个效果
      • 星际码仔:博主,我在开发时遇到一个问题,就是我在页面里用到了EditText,需求是需要固定放在底部,但用了CollapsingToolbarLayout之后,必须上滑才能显示,有没有什么办法可以固定在底部,不受上滑下滑影响呢?
      • 花季浅忆:博主好样的
      • 2d0ac5a90df7:你这立即播放的图片是怎么样的,我弄个粉色的播放键,当上滑后这个图怎么都看不见
      • 正阳Android:我的悬浮按钮设置锚点是在AppBarlayout上但是不显示出来,好奇怪
      • tomato_wl:我想知道在CollapsingToolbarLayout里面放个视频播放器 如何解决全屏问题
      • 4b01863fd657:支持一下
      • 爱哭的笨小孩:觉得这篇文章不错 赏一个
      • HuDP:你好 请问一个页面 可以有多个折叠效果嘛
      • cab4af44b67a:那个title怎么居中的
      • dadfb709c0d5:如果我的布局是这样,ViewPager里的的Fragment布局是SwipeRefreshLayout里嵌套着ListView,但是ListView没法滑动,该如何解决呢
      • 爱吃鱼的外星人:你好,我在CollapsingToolbarLayout加了一个铺满整个CollapsingToolbarLayout的imageview(设置模糊背景的);最后发现偶而tablayout的背景会变成imageview上的背景,这个bug偶尔出现,而且当我退出app后再进去就正常了,一直找不到原因。
        CollapsingToolbarLayout父类是Framelayout,tablayout位于CollapsingToolbarLayout的最上层,再怎么变tablayout的背景应该还是自身啊,实在奇怪
      • 海洋的风:怎样设置标题大小呢
      • unfind:当CoordinatorLayout和ViewPager搭配是用的时候,由于ViewPager斜着滑动,可能会默认在进行滑动翻页,这样,如果手指在往上滑动过程中,有一点点的斜了,那么会有一个滑动的冲突存在。不知道这个有么有什么好的解决方法?
      • Yera丶:成功的解决了我的问题 3Q
      • 9e29589e5c0e: 求源码。、
      • 岛在深海处:有个问题不明白,怎么去掉ToolBar上默认显示项目名称啊?,就算我在代码中toolbar.setTitle(“hello“””)运行出来Toobar上还是显示的项目名称,求指点
        糖姆纳斯:在CollapsingToolbarLayout下添加 app:titleEnabled="false"属性
        GoAllOutInWork:你这个问题解决了吗?怎么取掉这个默认显示的title啊 谢谢了
      • zml_smile:只想要那张美女图片!!! 有同样想法的顶一下~
      • 778af53c923c:怎么没有eclipse的版本讲解
        yunhen:老哥,醒醒啊 ,现在都2017年啦 ,还用ec啊
      • liubaobaobao11:楼主写的真心不错,非常详细,一看就能明白,希望有更多总结的与大家分享,学习了
      • 78f43b298b86::heart_eyes: 妹子不错,来个链接
      • 0d9ada424145:受教了
      • 曹半斤:这个沉浸式不是很会,,可不可以监听到CollapsingToolbarLayout收缩状态,然后再去设置状态栏的颜色,因为用的是StatusBarUtil去设置沉浸栏的
      • 斑马搬码:其实我很好奇android:theme="@style/AppTheme.AppBarOverlay"背后的style是什么
      • 2adaf57396ed:博主好人啊! 正研究这个怎么使用的时候就发现了博主的文章,写的太tmd好了
      • 9f3036e4eef1:楼主你好 那个图片发生渐变的位置可以调整吗!!!
      • 爆发小宇:学习了,但是我用这些view用于模仿蘑菇街的时候发现,效果并不理想
      • c459beb59113:楼主,请问怎么联系你,我有个关于collapsingtoolbarlayout的问题想请教
      • 我想成为创业者:楼主求demo
      • 碧海鱼龙:想一想(马化腾脸),博主的播放按钮真的是居中吗?
      • 张贤同学:搞不出来。。。 求源码
      • Euterpe:在4.4下 能正常吗?
      • sendtion:很赞
      • AJiangNo1:建议本着开源的精神奉献一下源码,为国内app开发贡献一份力量 :clap:
        椰子:文章写的挺详细了,不要只做伸手人嘛,自己实践一下。
        7c3bc7faf414:希望能得到回复嘿嘿
        7c3bc7faf414:在吗 楼主 我也在使用这个东西 可是在使用中出现了一些问题 不知楼主有没有一点点时间指教一下,就是一个小的问题
      • 无言独上西楼丶月如勾:问下楼主,你这demo里面视频播放器是用什么做的?
      • 迷惘搬运工:你的图片不会是本地的吧
      • 迷惘搬运工:状态栏和toolbar的颜色保持一致是怎么做到的
      • c89cfd248490:android:fitsSystemWindows设置这个也不是到状态栏呢
      • 嗷嗷飞:楼主,真心求源码啊, :heart_eyes:
      • 墨鬁:求源码
      • 0645f9279e1a:给力啊,我一直想要这种效果来着,一直没找到,今天算是看到了,谢谢啦 :sunglasses:
      • 呃哈哈:有demo吗 或者github
        96fa0970e773:@简名 请问实例中视频播放器播放视频时如何让底部滑动时顶部不坍缩
        呃哈哈:@简名 嗯嗯,因为是新手,所以觉得有demo更好,谢谢了
        简名:@我是不是你大爷 这个并不是特别复杂,就没有整合出demo。感兴趣的话可以自己试试
      • d8c424478728:android:fitsSystemWindows="true"不太理解,设为true时应该不会延伸到statusBar中吧?
        RoyAlex:@指间的灵动 现在很多手机都是5.0以上的了,起兼容我都开始从5.0了
        Ggx的代码之旅:@简名 就是这样的 设置为true是不会延伸到statusBar下的 这篇文章压根就没考虑过4.4的手机 估计只是在API21上的
        简名:@Wesly186 一开始我也是这么认为的,你可以试一下
      • 赵先森Kevin:学习了,不错。
      • biubiutoo:厉害厉害:blush:

      本文标题:看,这个工具栏能伸缩折叠——Android Collapsing

      本文链接:https://www.haomeiwen.com/subject/tmvmrttx.html