博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CollapsingToolbarLayoutDemo【可折叠式标题栏,顺便带有CardView卡片式布局】
阅读量:6344 次
发布时间:2019-06-22

本文共 5985 字,大约阅读时间需要 19 分钟。

版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

CollapsingToolBarLayout是一个作用于ToolBar基础之上的布局,它也是由Design Support库提供的。不过CollapsingToolBarLayout(可折叠的toolbar布局)是不能独立存在的,它在设计的时候就被限定只能作为AppBarLayout的直接子布局来使用。而APPBarLayout【垂直方向的LinearLayout】又必须是CoordinatiorLayout【加强版的FrameLayout】的子布局。

--摘自《第一行代码(第2版)》

CardView适用于实现卡片式布局效果的重要控件,由appcompat-v7库提供,实际上CardView也是一个FrameLayout,只是额外提供了圆角和阴影效果,看上去有立体的感觉。一般CardView用在ListView的item布局中,或者单独一个区域在导航栏下方。

效果图

代码分析

activity_main.xml布局文件示意图:

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

(1)在build.gradle中引入design支持库【版本号跟appcompat保持一致】

apply plugin: 'com.android.application'android {    compileSdkVersion 27    defaultConfig {        applicationId "com.why.project.collapsingtoolbarlayoutdemo"        minSdkVersion 16        targetSdkVersion 27        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support:appcompat-v7:27.1.1'    implementation 'com.android.support.constraint:constraint-layout:1.1.2'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:1.0.2'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'    //引入design库    implementation 'com.android.support:design:27.1.1'}

(2)修改styles.xml文件中的样式为NoActionBar

(3)因为使用到了CardView,所以在build.gradle中引入cardview支持库【版本号跟appcompat保持一致】

apply plugin: 'com.android.application'android {    compileSdkVersion 27    defaultConfig {        applicationId "com.why.project.collapsingtoolbarlayoutdemo"        minSdkVersion 16        targetSdkVersion 27        versionCode 1        versionName "1.0"        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"    }    buildTypes {        release {            minifyEnabled false            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'        }    }}dependencies {    implementation fileTree(dir: 'libs', include: ['*.jar'])    implementation 'com.android.support:appcompat-v7:27.1.1'    implementation 'com.android.support.constraint:constraint-layout:1.1.2'    testImplementation 'junit:junit:4.12'    androidTestImplementation 'com.android.support.test:runner:1.0.2'    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'    //引入design库    implementation 'com.android.support:design:27.1.1'    //CardView    implementation 'com.android.support:cardview-v7:27.1.1'}

(4) 在colors.xml中添加以下代码

#3F51B5
#303F9F
#FF4081
#3F51B5
#ffffff

(5)在dimens.xml中添加以下代码

56dp

三、使用方法

(1)布局文件如下

(2)代码中控制显示隐藏标题

package com.why.project.collapsingtoolbarlayoutdemo;import android.os.Bundle;import android.support.design.widget.AppBarLayout;import android.support.design.widget.CollapsingToolbarLayout;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.widget.LinearLayout;public class MainActivity extends AppCompatActivity {    private AppBarLayout appBarLayout;    private CollapsingToolbarLayout mCollapsingToolbarLayout;    private LinearLayout mHeadlayout;    private Toolbar mToolbar;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initViews();        initToolBar();        setTitleToCollapsingToolbarLayout();    }    private void initViews() {        appBarLayout = findViewById(R.id.appBar);        mCollapsingToolbarLayout = findViewById(R.id.collapsing_toolbar);        mHeadlayout = findViewById(R.id.head_layout);    }    private void initToolBar() {        mToolbar = findViewById(R.id.toolbar_base);        setSupportActionBar(mToolbar);//由于toolbar只是一个普通控件,我们将ToolBar设置为ActionBar    }    /**     * 使用CollapsingToolbarLayout必须把title设置到CollapsingToolbarLayout上,     * 设置到Toolbar上则不会显示【备注:其实是可以的】     */    private void setTitleToCollapsingToolbarLayout() {        appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {            @Override            public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {                if (verticalOffset <= -mHeadlayout.getHeight() * 4 /5) {                    mCollapsingToolbarLayout.setTitle("我的");//设置标题                    //使用下面两个CollapsingToolbarLayout的方法设置展开透明->折叠时你想要的颜色                    mCollapsingToolbarLayout.setExpandedTitleColor(getResources().getColor(android.R.color.transparent));                    mCollapsingToolbarLayout.setCollapsedTitleTextColor(getResources().getColor(R.color.nav_text_color));                } else {                    mCollapsingToolbarLayout.setTitle("");                }            }        });    }}

混淆配置

参考资料

项目demo下载地址

你可能感兴趣的文章
[LeetCode] Spiral Matrix 解题报告
查看>>
60906磁悬浮动力系统应用研究与模型搭建
查看>>
指纹获取 Fingerprint2
查看>>
面试题目3:智能指针
查看>>
取消凭证分解 (取消公司下的多个利润中心)
查看>>
flask ORM: Flask-SQLAlchemy【单表】增删改查
查看>>
vim 常用指令
查看>>
nodejs 获取自己的ip
查看>>
Nest.js 处理错误
查看>>
你好,C++(16)用表达式表达我们的设计意图——4.1 用操作符对数据进行运算...
查看>>
[转] Mac下 快速写博客的软件 MarsEdit
查看>>
Unity的赛车游戏实现思路
查看>>
[Android UI] Shape详解 (GradientDrawable)
查看>>
边学边体验django--HttpRequest 对象
查看>>
18.3 redis 的安装
查看>>
jdbc 简单连接
查看>>
Activiti 实战篇 小试牛刀
查看>>
java中的Static class
查看>>
Xshell 连接CentOS服务器解密
查看>>
[工具类]视频音频格式转换
查看>>