android layout 界面开发,Android开发之CoordinatorLayout使用详解一

2023-11-15

官网描述为:CoordinatorLayout是一个增强版的FrameLayout(继承自ViewGroup)

用途:

1、作为应用的顶层视图。

2、作为一个可以指定子View之间相互作用的容器,通过给CoordinatorLayout的子View指定CoordinatorLayout.Behavior 来定义子view之间的相互作用。(你可以想象成:CoordinatorLayout相当于在两个View之间充当中介,这样子的好处就是两个view之间的耦合度降低了,只需要跟coordinatorLayout打交到即可,而CoordinatorLayout.Behavior 相当于两个view之间的协议,即通过怎样的规则来约束双方的行为。)

设计概念:

CoordinatorLayout:CoordinatorLayout 作为最顶层视图,将负责管理所有的子view,使其内部的子View彼此间产生一种联系。这个联系通过Behavior来实现(包括了滑动状态的处理以及View状态的处理)。

AppBarLayout:AppBarLayout 继承自限性布局,作为增强版的线性布局,他增加了对滑动手势的处理。

Behavior:Behavior 是google新提出的,能够让你以非侵入式的方式去处理目标View和其他View的交互行为。Behavior需要设置在触发事件(比如滚动)的view上,且这个View必须是CoordinatorLayout的第一层级下的子view,否则没有效果,因为Behavior的初始化是在CoordinatorLayout的LayoutParams中通过反射完成的。

Behavior实例化方式:1、通过app:layout_behavior声明 ;2、在你的自定义View类上添加@DefaultBehavior(MyBehavior.class);

Behavior只是个接口,其调用是由NestedScrollingParent与NestedScrollingChild接口负责调用。

接下来我们通过阅读部分源码进行学习:

首先,我们从两个view是如何通过coordinatorlayout产生关联来入手;看代码

LayoutParams(Context context, AttributeSet attrs) {

super(context, attrs);

final TypedArray a = context.obtainStyledAttributes(attrs,

R.styleable.CoordinatorLayout_Layout);

this.gravity = a.getInteger(

R.styleable.CoordinatorLayout_Layout_android_layout_gravity,

Gravity.NO_GRAVITY);

mAnchorId = a.getResourceId(R.styleable.CoordinatorLayout_Layout_layout_anchor,

View.NO_ID);

this.anchorGravity = a.getInteger(

R.styleable.CoordinatorLayout_Layout_layout_anchorGravity,

Gravity.NO_GRAVITY);

this.keyline = a.getInteger(R.styleable.CoordinatorLayout_Layout_layout_keyline,

-1);

insetEdge = a.getInt(R.styleable.CoordinatorLayout_Layout_layout_insetEdge, 0);

dodgeInsetEdges = a.getInt(

R.styleable.CoordinatorLayout_Layout_layout_dodgeInsetEdges, 0);

mBehaviorResolved = a.hasValue(

R.styleable.CoordinatorLayout_Layout_layout_behavior);

if (mBehaviorResolved) {

mBehavior = parseBehavior(context, attrs, a.getString(

R.styleable.CoordinatorLayout_Layout_layout_behavior));

}

a.recycle();

if (mBehavior != null) {

// If we have a Be

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

android layout 界面开发,Android开发之CoordinatorLayout使用详解一 的相关文章

  • 保定2021高考学校成绩查询,2021年保定高考成绩排名及成绩公布时间什么时候出来...

    保定高考结束后 每年都有很多家长和考试不知道保定高考成绩排名如何查询 保定高考成绩什么时候公布以及查询方式 本文小编整理了保定高考成绩查询排名的相关知识 一 保定高考成绩公布时间及查询方式 根据往年保定高考成绩公布时间预测 2021年保定高
  • 小程序授权微信登录,获取微信用户名,头像,登录code

    getUserProfile e var that this wx getUserProfile desc 用于完善会员资料 success res gt if res 用户名 res userInfo nickName 头像res use
  • 【BERT类预训练模型整理】

    BERT类预训练模型整理 1 BERT的相关内容 1 1 BERT的预训练技术 1 1 1 掩码机制 1 1 2 NSP Next Sentence Prediction 1 2 BERT模型的局限性 2 RoBERTa的相关内容 2 1
  • 小程序(二十三)微信小程序左上角返回按钮触发事件

    微信并没有为我们提供左上角返回上一页触发的事件 但是有的时候这个操作我们还是需要监听一下 下图红框标注的返回上一页按钮 最后实现的效果 点击返回上一页的时候 我需要重新加载上一页的数据 返回上一页按钮只会触发上一页的onShow生命周期函数
  • 怎么将本地文件上传到远程git仓库

    怎么将本地文件上传到远程git仓库 1 先进入项目文件夹 通过命令 git init 把这个目录变成git可以管理的仓库 git init 2 把文件添加到版本库中 使用命令 git add 添加到暂存区里面去 不要忘记后面的小数点 意为添
  • 第二篇:UE4如何动态修改物体材质

    1 找到需要替换材质的物体 可以看到下方所有的材质 它是一个数组 前面是材质的下标 2 打开关卡蓝图 编写如下蓝图 第一步获取所有材质 创建动态材质接口 第二部设置材质 element Index代表要替换的材质下标 Material代表要
  • 米米商城项目

    米米商城 1 开发环境 2 项目功能 3 项目搭建步骤 4 配置文件 4 1 pom xml 4 2 jdbc properties 4 3 Mybaties配置文件 SqlMapConfig xml 4 4 Spring配置文件 4 4
  • 15.Mybatis 更新操作-update

    1 update 标签 update 标签是用于定义更新 语句的 1 1 常用属性 update 有几个常用的属性 但是通常只需要设置id 即可 id sql 片段在命名空间内的唯一标识 和mapper 中方法名保持一致 parameter
  • python使用keyboard库写的GUI键盘宏

    前言 之前和朋友玩游戏 需要一直按住两个按键 很麻烦 就像用python写个小脚本来方便自己 说干就干 用于学习 正文 用到的库 keyborad threading tkinter time 分析 由于需要监听键盘与运行可视化界面 所以要
  • 5.1 setfenv,但5.3可以使用lua_getglobal(l1, "_G");

    5 1使用法 lua State L luaL newstate luaL openlibs L dostring L function f1 my var 100 print var set end create func on stat
  • Springboot+Netty+Websocket实现消息推送实例

    Springboot Netty Websocket实现消息推送 文章目录 Springboot Netty Websocket实现消息推送 前言 一 引入netty依赖 二 使用步骤 1 引入基础配置类 2 netty服务启动监听器 3
  • windows 消息机制

    windows 操作系统是由事件驱动的 也叫消息机制 一般来说分为四步 用户动作也就是事件 gt windows 将事件翻译成消息 gt 将消息放入消息队列 gt 消息循环从消息队列中取出消息并发送给窗口处理程序 我们来看一下窗口最简单窗口
  • Elasticsearch 设置用户名密码认证(亲测)

    文章目录 第一步 在 elasticsearch yml 中添加如下配置 第二步 重启elasticsearch服务 第三步 设置elasticsearch密码 第四步 验证 修改密码 如果密码忘了怎么办 如何重置密码 1 修改elasti
  • 题目2-1 where is the flag

    对照启明星辰网络空间安全学院编著的 CTF安全竞赛入门 靶场和解题思路 考查点 网页源代码 右键查看源代码
  • 谁有用vue.js写的前端模板页面??? 急需!!!

    谁有用vue js写的前端模板页面 急需
  • Ubuntu切换root用户

    Ubuntu下root用户的默认密码 Ubuntu下root的默认密码是随机的 每次开机都会有一个新的密码 可以在中断输入命令 sudo passwd 然后输入当前用户的密码 按下回车 终端会提示输入新的密码并确认 此时的密码就是root新
  • Node.js 学习系列(五)—— 文件系统

    Node js 提供一组类似 UNIX POSIX 标准的文件操作API Node 导入文件系统模块 fs 语法如下所示 var fs require fs 异步和同步 Node js 文件系统 fs 模块 模块中的方法均有异步和同步版本
  • 如何使用SWC,如何发布,打包SWC

    SWC的使用方法 1 如果是FLEX的话就比较简单 直接在library中加入即可 2 是Flash的情况下 目前只有CS4可以直接导入 方法是 file gt gt publish settings gt gt flash gt gt s
  • 从零开始的Python编程

    目录 1 输出函数print 2 转义字符 3 Python中的标识符和保留字 4 变量的定义和使用 5 Python中常见的数据类型 6 数据类型转换 7 Python中的注释 8 input函数的使用 9 运算符 10 对象的布尔值 1

随机推荐

  • SQL优化 ----锁机制

    锁机制 解决因资源共享 而造成的并发问题 示例 当仓库中最后一件衣服时 A这时候下单 随后B也同一时间下单 这时候就会出现问题 到底这最后一件衣服卖给了谁 所以就要通过锁来解决这种问题 衣服 A来的时候加锁 gt 然后A就可以下单 付款 打
  • C++的复制构造函数三种用法

    前言 如果真的想明白 为什么你写的函数的返回值是对象时 有的时候调用了复制构造函数 而有的时候 没有调用复制构造函数 需要明白一件事 函数的返回值是对象时 什么情况下 函数的返回是return by value 即生成了临时对象 这两个问题
  • 【Kubernetes资源篇】Service四层代理入门实战详解

    文章目录 一 Service四层代理概念 原理 1 Service四层代理概念 2 Service工作原理 3 Service原理解读 4 Service四种类型 二 Service四层代理三种类型案例 1 创建ClusterIP类型Ser
  • 线性表 :顺序表(ArrayList) 和 单链表(LinkedList) 详解

    线性表 1 顺序表 2 单链表 单向 不带头 非循环链表 3 顺序表和链表的区别 面试 线性表 List 是n个具有 相同特性 的数据元素的 有限序列 线性表是一种在实际中广泛使用的数据结构 常见的线性表 顺序表 链表 栈 队列 字符串 线
  • mac系统渗透测试小技巧-将命令行工具能够tab补全

    在kali中各种工具都能补全 但在mac中我们有些工具是需要自己下载回来的 每次使用工具都需要进入目录再打开命令行 这样会影响我们渗透测试的速度 说起来就是懒 懒人自有懒方法 其实很简单 我们只需要添加一个软连接到 usr local bi
  • 人工智能学习线路图

    人工智能学习线路图 Python教程 Python 教程 Python 简介 Python 环境搭建 Python 中文编码 Python 基础语法 Python 变量类型 Python 运算符 Python 条件语句 Python 循环语
  • SpringCloud Gateway 在微服务架构下的最佳实践

    前言 本文整理自云原生技术实践营广州站 Meetup 的分享 其中的经验来自于我们团队开发的阿里云 CSB 2 0 这款产品 其基于开源 SpringCloud Gateway 开发 在完全兼容开源用法的前提下 做了诸多企业级的改造 涉及功
  • 从信号处理认识傅里叶变换

    前言 在表示和分析线性时不变系统时 我们的基本方法是将系统输入分解成基本信号的线性组合 其响应是基本输入响应的相同线性组合 卷积和和卷积积分源于我们将输入信号分解成基本信号的一种特定选择 特别是延迟的单位脉冲 这种选择的优点在于 对于线性时
  • 计算机中的换行符、回车符、\n、\r、\n\r 怎么区分

    n是换行 英文是New line r是回车 英文是Carriage return r 是回车 前者使光标到行首 carriage return n 是换行 后者使光标下移一行 line feed r 是回车 return n 是换行 new
  • 将COLMAP中生成的images.txt结果可视化

    instant ngp中执行scripts colmap2nerf py时 在colmap text目录下会生成images txt文件 此文件中每两行定义一幅图像的信息 IMAGE ID QW QX QY QZ TX TY TZ CAME
  • HTTP协议和HTTPS协议的区别

    HTTP协议和HTTPS协议的区别 1 HTTP协议传输的数据都是未加密的 也就是明文的 使用HTTP协议传输隐私信息不安全 2 HTTPS协议是由SSL 安全套接层 为网络通信提供安全及数据完整性的一种安全协议 和HTTP协议构建的 是一
  • Nacos启动异常

    可能原因一 集群切换单机 startup m standalone 可能原因二 derby data文件夹内文件解析失败 解决方案 删了derby data文件夹重启就行 报错信息 供网友搜索 2021 08 11 13 11 37 550
  • Fish Redux系列学习之认识view、action

    继续上一篇文章 Fish Redux系列学习之新建page以及认识state 如上图 现在我们学习的是buildview这个组件 说白了 buildView是我们写页面的地方 跟写普通flutter的page页面一样 我们将页面都写在这里面
  • Date互转String和时间戳

    Date转字符串 private static String convertDateToStr Date date String pattrn if date null return StringUtils EMPTY Instant in
  • 数据类型 -- uint32_t 类型

    整型的每一种都有无符号 unsigned 和有符号 signed 两种类型 float和double总是带符号的 在默认情况下声明的整型变量都是有符号的类型 char有点特别 如果需声明无符号类型的话就需要在类型前加上unsigned 无符
  • QT5 动态链接库的创建和使用(QT自己做动态库给自己使用)

    记录一下QT5 动态链接库的创建和使用 在文章的最后有完成的代码供下载 1 创建动态链接库 先新建一个库项目 选择chose进入下一下页面 类型选择共享库 输入一个名称 我输入的是sld 再点击下一步到 如果这里我们需要QtGui所以也勾选
  • osgEarth的Rex引擎原理分析(一一五)tif文件分辨率的计算

    目标 一一四 中的问题202 maxX为右经度 minX为左经度 maxY为上纬度 minY为下纬度 double resolutionX maxX minX double warpedDS gt GetRasterXSize double
  • cuBLAS的使用

    cuBLAS包含了三部分 cuBLAS API 从cuda6 0开始 CUBLASXT API 从cuda6 0开始 cuBLASLt API 从cuda10 1开始 想要使用cuBLAS API 必须按照以下步骤 在GPU端建立矩阵或向量
  • 资源有限的大型语言模型的全参数微调

    文章目录 摘要 1 简介 2 相关工作 3 方法 3 1 重新思考optimizer的功能 3 1 1 使用SGD 3 1 2 隐式BatchSize 3 2 LOMO 低内存优化 3 3 使用LOMO稳定训练 3 3 1 梯度归一化和裁剪
  • android layout 界面开发,Android开发之CoordinatorLayout使用详解一

    官网描述为 CoordinatorLayout是一个增强版的FrameLayout 继承自ViewGroup 用途 1 作为应用的顶层视图 2 作为一个可以指定子View之间相互作用的容器 通过给CoordinatorLayout的子Vie