Android实现折叠式Toolbar:CollapsingToolbarLayout 使用教程与解析

2023-11-11

简介
在各种不同的应用中,大家可能会经常见到这样一个效果:Toolbar是透明的,有着一个背景图片以及大标题,随着页面向上滑动,其标题逐渐缩放到Toolbar上,而背景图片则在滑动到一定程度后变成了Toolbar的颜色,这种效果也即是折叠式效果。其实这种效果在GitHub上面已经有很多开源库实现了,但是Google在其推出的Design Library库中也给出了一个这种控件,让我们很方便地实现了这种效果。这个控件是CollapsingToolbarLayout,它是一个增强型的FrameLayout。那么,本篇文章就给大家详细地介绍该控件的使用方法以及注意事项。

效果
本文结合一个Demo来进行演示,下面是最终的显示效果,也即折叠式Toolbar的效果: 


引入
使用该控件,需要引入Android Design Library这个库,同时地,我们需要把app的主题也要做相应的修改以便适应这个控件,所以我们也需要appcompat这个库,那么我们在build.gradle文件中引入如下:

dependencies {
    compile 'com.android.support:cardview-v7:24.1.0'  //cardview
    compile 'com.android.support:design:24.1.0'
    compile 'com.android.support:appcompat-v7:24.1.0'
}


本文内容均基于官方文档,有兴趣的读者可以前往官方文档进一步查看(自备梯子)。

知识储备
接下来,笔者一步步地介绍该控件的用法。首先,我们先来了解这个控件的常用xml属性。

一、常用xml属性介绍
1)contentScrim:当Toolbar收缩到一定程度时的所展现的主体颜色。即Toolbar的颜色。 
2)title:当titleEnable设置为true的时候,在toolbar展开的时候,显示大标题,toolbar收缩时,显示为toolbar上面的小标题。 
3)scrimAnimationDuration:该属性控制toolbar收缩时,颜色变化的动画持续时间。即颜色变为contentScrim所指定的颜色进行的动画所需要的时间。 
4)expandedTitleGravity:指定toolbar展开时,title所在的位置。类似的还有expandedTitleMargin、collapsedTitleGravity这些属性。 
5)collapsedTitleTextAppearance:指定toolbar收缩时,标题字体的样式,类似的还有expandedTitleTextAppearance。

二、常见的标志位
一般开发中,CollapsingToolbarLayout不会单独出现在布局文件中,而是作为另一个控件CoordinatorLayout的子元素出现,那么CoordinatorLayout又是什么呢?其实CoordinatorLayout这个控件很强大,能对其子元素实现多种不同的功能,一个常见的用法就是:给它的一个子元素A设置一个layout_scrollFlags的属性,然后给另外一个子元素B设置一个layout_behavior=”@string/appbar_scrolling_view_behavior”的属性,这个子元素B一般是一个可以滑动的控件,比如RecyclerView、NestedScrollView等,那么当子元素B滑动的时候,子元素A就会根据其layout_scrollFlags的属性值而做出不同的改变,所以我们要为CollapsingToolbarLayout设置layout_scrollFlags属性。

layout_scrollFlags
我们来看看layout_scrollFlags有哪几个属性可以选择: 
* scroll:所有想要滑动的控件都要设置这个标志位。如果不设置这个标志位,那么View会固定不动。 
* enterAlways:设置了该标志位后,若View已经滑出屏幕,此时手指向下滑,View会立刻出现,这是另一种使用场景。 
* enterAlwaysCollapsed:设置了minHeight,同时设置了该标志位的话,view会以最小高度进度屏幕,当滑动控件滑动到顶部的时候才会拓展为完整的高度。 
* exitUntilCollapsed:向上滑动时收缩当前View。但view可以被固定在顶部。 
可能直接用语言来描述还是有点太抽象,下面会以实际的效果给大家展示这几个标志位的具体作用。

layout_collapseMode
上面提到CollapsingToolbarLayout是一个FrameLayout,它内部能有多个子元素,而子元素也会有不同的表现。比如说,在上面的GIF图中,toolbar在缩放后是固定在顶部的,而imageview则是随着布局的滚动而滚动,也即存在一个相对滚动的过程。所以这些子元素可以添加layout_collapseMode标志位进而产生不同的行为。其实这里也只有两种标志位,分别是: 
* pin:有该标志位的View在页面滚动的过程中会一直停留在顶部,比如Toolbar可以被固定在顶部 
* parallax:有该标志位的View表示能和页面同时滚动。与该标志位相关联的一个属性是:layout_collapseParallaxMultiplier,该属性是视差因子,表示该View与页面的滚动速度存在差值,造成一种相对滚动的效果。

三、常用的层级关系
上面说到CollapsingToolbarLayout一般作为CoordinatorLayout的子元素出现,其实如果要实现上面的效果,还需要另外一个控件:AppBarLayout。该控件也是Design库的控件,作用是把其所有子元素当做一个AppBar来使用。一般来说,实现折叠式Toolbar可以使用以下的层级关系:

<android.support.design.widget.CoordinatorLayout...>
    <android.support.design.widget.AppBarLayout...>
        <android.support.design.widget.CollapsingToolbarLayout...>
            <!-- your collapsed view -->
            <View.../>
            <android.support.v7.widget.Toolbar.../>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>

    <!-- Scroll view -->
    <android.support.v7.widget.RecyclerView.../>
</android.support.design.widget.CoordinatorLayout>


从上面的层级关系来看,最外面的一层是CoordinatorLayout,它有两个子元素,分别是AppBarLayout和RecyclerView(可滑动控件),而AppBarLayout则包裹着CollapsingToolbarLayout,CollapsingToolbarLayout的子元素分别是被折叠的View(可以是一张图片,也可以是一个布局)以及我们的Toolbar。

例子①
有了以上的知识储备,我们就可以开始动手写代码了,我们的目标是实现上面的gif图的效果。 
1、在activity_main.xml文件中(注:以下注释只是为了方便说明):

<android.support.design.widget.CoordinatorLayout 
    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.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:contentScrim="?attr/colorPrimary"       <!--toolbar折叠后的主体颜色  -->
            app:expandedTitleMarginEnd="10dp"           <!--文字展开时的Margin  -->
            app:expandedTitleMarginStart="10dp"
            app:collapsedTitleTextAppearance="@style/TextAppearance.AppCompat.Title"    <!--字体的表现  -->
            app:layout_scrollFlags="scroll|exitUntilCollapsed">             


            <ImageView
                android:id="@+id/iv"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:scaleType="centerCrop"
                app:layout_collapseMode="parallax"               <!--设置imageView可随着滑动控件的滑动而滑动 -->
                app:layout_collapseParallaxMultiplier="0.5"/>    <!--视差因子 -->

            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbar"
                android:layout_width="match_parent"
                android:layout_height="?attr/actionBarSize"
                app:layout_collapseMode="pin" />        <!--toolbar折叠后固定于顶部 -->
        </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">   <!--为滑动控件设置Behavior,这样上面的控件才能做出相应改变 -->

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>
            <include layout="@layout/item_card"/>

        </LinearLayout>
    </android.support.v4.widget.NestedScrollView>
</android.support.design.widget.CoordinatorLayout>


与其相关联的item_card.xml布局文件:

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
    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="100dp"
    android:layout_margin="5dp"
    app:cardElevation="5dp"
    app:contentPaddingTop="2dp"
    app:contentPaddingBottom="2dp">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Learn and Share Android"
        android:textSize="20sp"
        android:layout_gravity="center"/>

</android.support.v7.widget.CardView>


2、在MainActivity.java文件中再做出一些处理: 

   private ImageView iv;
    private CollapsingToolbarLayout collapsingToolbarLayout;
    private Toolbar toolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        collapsingToolbarLayout = (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar_layout);
        iv = (ImageView) findViewById(R.id.iv);
        toolbar = (Toolbar) findViewById(R.id.toolbar);

        setSupportActionBar(toolbar);
        toolbar.setNavigationIcon(R.mipmap.ic_drawer_home);
        collapsingToolbarLayout.setTitle("DesignLibrarySample");
        collapsingToolbarLayout.setCollapsedTitleTextColor(Color.WHITE);
        collapsingToolbarLayout.setExpandedTitleColor(Color.WHITE);
        iv.setImageResource(R.mipmap.ic_bg);
    }


上面,我们为collapsingToolbarLayout设置了标题,以及收缩时标题的颜色和展开时标题的颜色等。经过上面的一个简单例子,就能实现上面gif图所显示的折叠式Toolbar的效果了。

这里先小结一下:在CoordinatorLayout作为父布局的情况下,给滑动控件设置一个layout_behavior=”@string/appbar_scrolling_view_behavior”标志位(该Behavior系统以及帮我们实现),那么当带有这个标志位的控件滑动的时候会触发带有scroll_flags标志位的另一个控件进行滑动,此时imageview的layout_collapseMode是parallax,所以它会以有视差的方式来相对滑动,而toolbar设置了pin的标记位,所以在收缩后会固定在屏幕顶部。

例子②
在例子①内,我们为CollapsingToolbarLayout设置的scroll_flags是”scroll | exitUntilCollapsed”,那么我们把标志位换成别的会有什么不同的效果呢? 
在activity_main.xml内,作如下修改:

<android.support.design.widget.CollapsingToolbarLayout
    ...
   app:layout_scrollFlags="scroll|enterAlwaysCollapsed|enterAlways">


然后别的不作改动,效果如下: 
 
显然,所造成的效果发生了变化,这里toolbar并不一致固定在顶部了,而是随着滑动而滑出了屏幕之外,同时如果手指向下滑动,toolbar会逐渐出现并保持着最小的高度,等到回到了最顶部后,toolbar会展开成原来的样子。 
那么,基于以上的例子,如果上面少了一个“enterAlwaysCollapsed”这个标志位又会怎样呢?该标志位的作用上面也已经解释过了,是控制toolbar以最小的高度进入屏幕,并且在滑动控件滑动到最顶端的时候再展开成完整的高度。如果少了这个标志位,在我们手指向下滑的时候,toolbar也会逐渐出现,但是与上面gif图不同的是,toolbar会继续展开变成原来的样子,即出现imageview。图这里就不放出来了,读者可以自行验证~

通过以上的两个小例子,我们对CollapsingToolbarLayout有了一定的认识,也学会了它的使用方法了,使用它能让我们的应用变得更加美观。那么最后,我们再来谈谈注意事项,也即笔者开发过程中遇到的坑。

注意事项
1、Android Design Support Library的使用需要配合特定的主题,一般用AppCompat下的主题即可,也可以自定义主题,继承自AppCompat的主题,否则会报错。另外如果使用Android Studio的话,主题的相关代码需要在styles.xml(v21)文件内做出相应的修改,否则使用Android 5.0以上的机子做测试的话也会报错。 
2、由于使用了AppCompat的主题,那么我们的Activity应该继承自AppCompatActivity。 
3、笔者之前使用design support library的版本号是23.1.0,在此版本上,CollapsingToolbarLayout没有设置collapsedTitleTextAppearance属性,标题可以正常显示,然而到了24.1.0版本,即上面所用的版本,如果没有设置collapsedTitleTextAppearance属性,则当toolbar收缩后,其标题文字变得非常小。所以我们要设置collapsedTitleTextAppearance=”@style/TextAppearance.AppCompat.Title”这个属性,才能变得正常。 
4、如果没有为CollapsingToolbarLayout设置一个title,那么会使用ActionBar自带的标题来显示应用的名称,这是因为调用了setSupportActionBar(toolbar)函数。
 
转载自:程序员的自我反思    原文链接:https://blog.csdn.net/a553181867/article/details/52871424 
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android实现折叠式Toolbar:CollapsingToolbarLayout 使用教程与解析 的相关文章

  • 不可变位图崩溃错误

    java lang IllegalStateException Immutable bitmap passed to Canvas constructor at android graphics Canvas
  • 如何从 AAR 依赖项中排除特定资源?

    有没有一种相当简单的方法来实现模块的build gradle文件来指示应排除依赖项中的某些文件 我特别感兴趣的是从 AAR 中排除某些资源 金丝雀泄密 https github com square leakcanary是一个有趣的库 可帮
  • 保存用户可以访问的 Flutter Android 应用程序中的文本文件

    我在 Flutter 中开发的 Android 应用程序的用户应该能够将一些数据保存 导出 到文本文件中 用户应该能够使用其他应用程序 包括文件管理器 在其 Android 设备上找到并访问此文件 我想 final directory aw
  • 带阴影的弯曲 Android 工具栏

    我需要为工具栏或卡片视图提供弯曲的底视图 我尝试过的 bg toolbar xml
  • 在 Android 2.2 上运行 HelloCordova 时找不到类“android.webkit.WebResourceResponse”

    我尝试按照本教程进行操作 http docs phonegap com en 2 7 0 guide getting started android index md html Getting 20 Started 20with 20 An
  • 如何编辑 gradle 依赖项

    我正在开发一个 android 项目 该项目在我的 gradle 文件中使用以下依赖项 compile com mapzen on the road 1 1 1 我想编辑其中一个文件 以添加一些缺少的功能并为该项目做出贡献 如何下载该项目并
  • 将标题设置为操作栏时出现空指针异常

    Error Caused by java lang NullPointerException Attempt to invoke virtual method void android app ActionBar setTitle java
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • 方法断点可能会大大减慢调试速度

    每当向方法声明行添加断点 在 Intellij IDEA 或 Android Studio 中 时 都会出现一个弹出窗口 方法断点可能会大大减慢调试速度 为什么会这样戏剧性地减慢调试速度 是我的问题吗 将断点放在函数的第一行有什么不同 Th
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • Android 手机应用意图

    我想在手机上启动手机应用程序作为意图 我正在使用这个代码 startActivity getPackageManager getLaunchIntentForPackage com android phone 但该函数抛出一个空指针异常 因
  • 当参数具有默认值时,为什么无法使用导航组件将参数传递给片段?

    我正在使用导航组件 但我不明白为什么如果定义了参数 则将参数传递给下面的方法时会出现错误 我正在使用 SafeArgs 只有当我为此参数定义默认值时才会出现此错误 有人可以解释一下为什么会发生这种情况以及如何解决它吗 这是导航图的部分代码
  • 如何从SurfaceView绘制到Canvas?

    我正在尝试做简单的画家 问题是Android看起来有三个独立的Canvas并给我它来顺序绘制 我用以下方式制作了用户界面SurfaceView 把霍尔德从中拿走 Override protected void onCreate Bundle
  • 模拟器:进程已完成,退出代码为 134(被信号 6:SIGABRT 中断)

    我最近刚刚开始在 Mac 上下载 Android Studio 版本 3 0 1 但收到以下错误 模拟器 进程已完成 退出代码为 134 被信号 6 SIGABRT 中断 我按照 Android Studio 教程操作并能够运行模拟器 但在
  • 如何在android中录制音频时暂停背景音乐

    我正在 Android 中开发一个音频记录应用程序 因此 如果设备音乐播放器中已播放任何背景音乐 则应在开始录制之前暂停该背景音乐 并且每当录制停止或暂停时 背景音乐都应恢复 播放录制的音频时也应该如此 有人可以帮我解决这个问题吗 提前致谢
  • Android:如何使视图增长以填充可用空间?

    这看起来很简单 但我不知道该怎么做 我有一个带有 EditText 和两个 ImageButtons 的水平布局 我希望 ImageButtons 具有固定大小 并且 EditText 占据布局中的剩余空间 如何才能做到这一点
  • Android:单一活动,多个视图

    我不是 Android 专业人士 尽管我开发了一个包含 50 多个活动的应用程序 这使得该应用程序非常庞大 经过8周的开发 现在出现了一些问题 导致应用程序难以维护和升级 我正在处理的主要问题是 我无法将对象引用传递给活动的构造函数 事实上
  • WebView 在某些设备上如果不长按则不会滚动

    我有一个 WebView 设置如下 the web view mWebView WebView findViewById R id webView push the url on to the web view mWebView loadU
  • 修改 ADW Android 启动器?

    我想更改和修改开源 ADW 启动器 启动器可在此处获取 https github com AnderWeb android packages apps Launcher https github com AnderWeb android p
  • 绘制大位图时 nSyncAndDrawFrame 速度极慢

    我想用多个大位图优化视差滚动视图 在我的 Nexus 5 上 一切都很顺利 Traceview 转储如下所示 doFrame 方法大约需要 18 毫秒才能完成 但是 当使用我的 Nexus 7 或 Android 6 模拟器 Genymot

随机推荐

  • 关于C++编程中引入头文件的顺序

    头文件顺序 场景 头文件顺序 场景 此文仅记录在编写程序的时候 h或者 cpp引入头文件时 标准库头文件 自己定义的类的头文件的先后顺序 c 兼容c语言 故而有时还是涉及到c语言的标准库头文件的引入 这里只记录其引入的顺序 头文件顺序 头文
  • Open3D Ransac拟合分割多个平面(方法二)

    目录 一 算法原理 二 代码实现 三 结果展示 四 测试数据 一 算法原理 算法的核心原理还是RANSAC拟合平面 具体理论可参考 Open3D 使用RANSAC分割平面 只是对代码稍加修改使其适用于分割点云数据中的多个平面 二 代码实现
  • SSM实现网上商城 有聊天功能

    1 项目介绍 实现一个网上商城 商品信息展示 购物车 订单管理 个人中心 商品评价 商品搜索 地址管理 聊天 后台管理 商品增删改查 分类管理 活动管理 客服聊天回复 2 开发环境 开发环境 IDEA eclipse Tomcat8 5 数
  • centos6.5破解,没成功

    安装aircrack ng make make install 新建crack文件夹下操作以下步骤 方便 监听wlan0 iwconfig eth0有线网卡 wlan0无线网卡 sudo airmon ng start wlan0 启动 s
  • Anaconda bug

    报错如下 DEBUG urllib3 connectionpool Starting new HTTPS connection 1 repo anaconda com 443 DEBUG urllib3 connectionpool Sta
  • C语言中的快速排序库函数

    前言 由于自己的记性一直不好 总是记不住c语言中的快速排序函数 于是自己写下博客来记录一下 快速排序库函数 c语言中的快速排序库函数如下 注意 库函数是在stdlib h头文件中 qsort arr length size t cmp 其中
  • python爬虫,爬取表格数据

    python爬虫 爬取全国空气质量指数 编程环境 Jupyter Notebook 所要爬取的网页数据内容如下图 python爬虫代码及含义详细说明 全国城市 import time import requests from bs4 imp
  • 虚拟磁盘工具vmkfstools的使用

    一 虚拟磁盘类型 厚置备延迟置零 默认选项创建过程中为虚拟磁盘分配所需空间 创建时不会擦除物理设备上保留的任何数据 但是以后从虚拟机首次执行写操作时会按需要将其置零 2 厚置备置零 创建支持群集功能的厚磁盘 在创建时为虚拟磁盘分配所需的空间
  • 学习笔记之——Jacobian matrix(雅可比矩阵)

    在 斯坦福大学公开课 机器人学 视频课程中一开始就提到了Jacobian matrix的重要性 为此写下本学习笔记介绍雅可比矩阵 本博客的内容来自于网络的各种资料的总结 已经给出参考引用 本文仅作本人学习记录用 目录 定义 机器人关节 Jo
  • ubuntu系统matlab2021a安装及设置matlab快捷方式

    一 matlab安装 1 matlab2021a下载 迅雷下载地址 magnet xt urn btih EB1C3A0864431D21A342F09CC75831879CB0E374 tr http 3A 2F 2Fbt4 t ru o
  • diy手工制作泡沫小球_【手工】泡沫和彩纸就能diy超多款创意花球,孩子的毕业典礼正好用上!...

    原标题 手工 泡沫和彩纸就能diy超多款创意花球 孩子的毕业典礼正好用上 毕业季来啦 孩子即将毕业 当父母的你们去和孩子一起拍毕业照的时候准备了什么礼物呢 遥想当年还是学生的小爱老师 虽然毕业前就老吐槽说不要收花 真到毕业了还是忍不住俗气地
  • docker registry 搭建流程(含CA认证)

    docker registry 搭建 含CA认证 环境说明 终端 操作系统 其他 服务端 Centos7 IP 10 192 3 230 客户端A boot2docker IP 192 168 99 100 服务端配置 安装docker y
  • ttl计算机,如何利用生存时间值(TTL)来判断操作系统

    一 什么是TTL TTL Time To Live 生存时间 是IP协议包中的一个值 当我们使用Ping命令进行网络连通测试或者是测试网速的时候 本地计算机会向目的主机发送数据包 但是有 的数据包会因为一些特殊的原因不能正常传送到目的主机
  • nginx服务器搭建好但是浏览器却无法访问原因排查

    问题 1 查看ip地址 2 xshell中访问nginx服务器 curl 服务器地址 curl 172 17 199 190 出现如下界面说明服务器搭建完成 3 在浏览器输入该网址 但是却无法打开 问题一 nginx监听的端口是否被占用 查
  • Kbuild系统源码分析(四)—./scripts/Makefile.build

    版权声明 本文为CSDN博主 ashimida 的原创文章 遵循CC 4 0 BY SA版权协议 转载请附上原文出处链接及本声明 原文链接 https blog csdn net lidan113lidan article details
  • Machine Learning Park--EM(最大期望算法)

    9 EM算法 最大期望算法 在前面聚类的博客当中 我们简单的讲解过使用EM算法求解GMM模型的过程 这里我们对EM算法深入进行探讨 本文Github仓库已经同步文章与代码https github com Gary code Machine
  • android缓存面试,Android面试——Glide 的缓存原理

    Glide 内部是使用 LruCache 弱引用和硬盘缓存实现的 Glide 主要将缓存分为两块内存缓存和硬盘缓存 两种缓存的结合 构成了 Glide 缓存机制的核心 内存缓存skipMemoryCache true 默认是开始缓存的 如果
  • 【数据结构】二叉树、堆多图详解(TopK、堆排序)

    和光同尘 我的个人主页 应该在肩膀上长着自己的脑袋 弗拉基米尔 伊里奇 列宁 二叉树 堆的概念及应用 前言 1 数的概念及结构 1 1 树的概念 1 2 树的相关概念 1 3 数的表示 2 二叉树概念及结构 2 1 概念 2 2 特殊二叉树
  • keil_lic.exe注册机使用

    第一步 以管理员身份运行keil5 第二步 打开File中的License Management 第三步 复制CID 第四步 选择对应的Target为ARM 粘贴CID 复制生成的注册码 第五步 将注册码粘贴到这 就ok了
  • Android实现折叠式Toolbar:CollapsingToolbarLayout 使用教程与解析

    简介 在各种不同的应用中 大家可能会经常见到这样一个效果 Toolbar是透明的 有着一个背景图片以及大标题 随着页面向上滑动 其标题逐渐缩放到Toolbar上 而背景图片则在滑动到一定程度后变成了Toolbar的颜色 这种效果也即是折叠式