ConstrainLayout解决复杂的嵌套布局

2023-11-16

       最近,项目比较忙,没什么时间写博客。

       今天我要讲的是,项目中复杂的嵌套布局你讲采取何种方式呢?如果按常规方式去做,估计你做完一个界面,估计够呛。我将推荐你们使用谷歌推出的ConstrainLayout,虽然还没有出正式版本,但用于复杂嵌套布局,能解决你很多问题。

       首先你要在项目中依赖于compile 'com.android.support.constraint:constraint-layout:1.0.0-beta4',很明显你能看到beta版本,这就是谷歌对外发布的测试版本,他就是要通过公测,收集各项反馈意见。以往我们觉得写布局是最没有技术含量,是因为布局太过于简单。现在我们就来玩玩ConstraintLayout。

       其次,你要明确,ConstrainLayout可能颠覆你以往写布局的方式,因为现在的一切你可能是直接在界面操作的。

       1.创建一个ConstrainsLayout的xml文件,你将看到直接可以查找ConstrainLayout。

     2.xml文件的起始和结束

<android.support.constraint.ConstraintLayout

    xmlns:android=" http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

</android.support.constraint.ConstraintLayout>

    3.当你看不到布局栏目红圈的内容,请注意在图片右下角,你要把它点击出来


    4.以前我们写布局,直接嵌套在LinearLayout或者RelativeLayout中,直接的约束条件就是layout_width和layout_height。但是,ConstrainLayout并不是这样子,他是通过你在布局界面
拖动控件,然后手动给他添加约束。因为不知道你到底要讲控件放置在哪里。如下图
 

我们可以看出,控件我们必须给它束缚左上右下,如果我们不这样子,控件就会默认跳到左上角,因为它不知道哪个地方属于它的。通过我们确认束缚它几个方向后,我们就可以去拖动,把它拖到你想要放置的位置。

5.接下来讲讲如何删除束缚,就是我们给他四个方向添加了束缚后,我们不要了,如何取消。总共有三种办法。

第一种,将鼠标放置在空间上,四个方向上分辨有红色圆圈,点击一个消除一个方向上的束缚


第二种,将鼠标放置在控件上出现一个带X的图标,点击它,自动清除该控件上的所有束缚


第三种,点击栏目上带有X的图标,自动清除所有束缚

6.接下来讲讲比较重要的辅助线,分为水平和处置,能很好针对嵌套布局

因为我们不可能每次通过屏幕四个边去束缚控件,这样长距离拖动它,心太累了。所以,有这两个辅助线,实在很方便。注意拖动水平或者垂直线,它都会动态有一个相对于X轴和Y轴的距离值,这样我们就很清楚布局中,我们该把控件放置在哪个位置上。

第一种,垂直

第二种,水平

这里有个注意点,如果在嵌套布局中,这个两根辅助线不可以随意删除,这样控件就会少去一个或多个方向上的束缚,代码将会报红,有error。

7.各种束缚和辅助还有删除都讲了,现在应该讲讲嵌套布局中,如何去定义这个控件的大小和放置位置了,这个就是properties了,你应该注意到右边这块区域

第一,我们可以不用在布局中拖动上下左右,这里,我们便可以去操作


第二,你应该注意到properites中,这个控件四个方向上都有一个16,那是默认束缚该控件相对于一个方向上的距离,当我们将控件拖动到边边,我们发现一直拖不到边,一直有一点距离,那是因为这个properties束缚了它。

注意控件四个方向相对于边的束缚距离,我们可以选择也可以去定义。

第三,我们在这里可以修改控件的宽高还有名字,这里我就不演示了。

          最近项目比较忙,这篇文章也是抽时间出来写得,还有很多东西写不完善,因为这篇文章我保存到草稿箱很多次了,强迫症的我,要求我必须赶完发表一篇关于ConstrointLayout。我就先演示一些基础的东西,以后想到,再演示其他给大家。赶出来的东西,还有很多不足,以后我再完善。

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

ConstrainLayout解决复杂的嵌套布局 的相关文章

  • Google Drive REST API 是否仍需要 GET_ACCOUNTS 权限?

    Google 已弃用 Google Drive Android API 我们正在迁移到 Google Drive REST API v3 2年前 我们有使用Google Drive REST API v2 的经验 我们知道GET ACCOU
  • 如何使全屏覆盖在方向更改后保持全屏?

    我正在制作一个应用程序 它可以创建在屏幕上行走的微小精灵动画 我有一个主要活动 带有 启动服务 按钮 这会启动一个服务 该服务 在onCreate 创建一个全屏视图并将其附加到根窗口管理器 这部分工作完美 它充满了屏幕 您可以离开应用程序
  • 单击另一个项目/小部件时展开/打开微调器?

    当用户单击另一个按钮时 我试图展开微调器 例如 我有一个带有值的微调器和一个 确定 按钮 当用户单击 确定 按钮而不从微调器中选择任何值时 微调器会自行扩展 是否可以在无需用户与微调器交互的情况下获得扩展微调器的事件 只需致电Spinner
  • Android任务执行中的“platformAttrExtractor”是什么?

    我介绍了我的构建关注者操作说明 https developer android com studio build optimize your build html profile在安卓中 gradlew profile recompile
  • Android 位置 API:获取提供商状态

    在 Android 中获取位置提供商状态的最佳方式是什么 当注册 LocationListener 以进行位置更新时 onStatusChanged String provider int status Bundle extras 每当状态
  • 通过模拟器控制台或 ADB 更改 Android 模拟器方向

    我正在尝试构建一个自动化测试框架 用于检查应用程序应该响应的基本内容 而不会崩溃 其中之一是检查应用程序是否正确响应配置更改 现在 由于它是自动化的 我必须以编程方式在横向和纵向之间切换模拟器的方向 并观察它是否崩溃 大写 因为有很多与 c
  • 获取Android库中的上下文

    我正在编写一个 Android 应用程序 它的一些功能封装在内部库中 但是 要使此功能发挥作用 库需要一个应用程序上下文的实例 为图书馆提供这种上下文的最佳方式是什么 我看到了一些选择 但没有一个有吸引力 Have my library c
  • 如果未安装应用程序,深层链接将重定向到 Play 商店

    我在我的应用程序中使用深度链接的概念 我真正想要的是 当我共享我的应用程序中的链接时 它工作正常 它会转到我想在我的应用程序中打开的活动 但问题是当用户没有这个时应用程序此链接通过手机浏览器打开 显示错误 未找到 但如果未安装应用程序 我想
  • 改造将多个图像上传到单个密钥

    我正在使用 Retrofit 将图像上传到我的服务器 这里我需要为一个密钥上传多个图像 我已经尝试使用 Postman 网络客户端 它运行良好 这是一个屏幕截图 以下是请求的键值对 调查图像 文件1 文件2 文件3 属性图像 文件DRA j
  • 可以用 Django 制作移动应用程序吗?

    我想知道我是否可以在我的网站上使用 Django 代码 并以某种方式在移动应用程序 Flutter 等框架中使用它 那么是否可以使用我现在拥有的 Django 后端并在移动应用程序中使用它 所以就像models views etc 是的 有
  • Ionic 框架 - Config.xml

    我需要修改 config xml 文件 因此在针对 Android 进行编译时我会获取以下权限
  • Android 上的 SQLite JDBC 驱动程序

    我正在尝试使用xerial sqlite jdbc在 Android 中管理我的数据库没有成功 我得到了java lang NoClassDefFoundError org sqlite SQLiteConnection异常 我已经导入了这
  • java.lang.AssertionError:CALL 'public final fun

    我正在尝试使用 jetPack Compose 制作一个项目 我拥有它工作所需的所有必要依赖项 但是当我运行我的应用程序时 它会抛出一个错误 我找不到解决方案 这是错误 java lang AssertionError CALL publi
  • 膨胀类 android.support.design.widget.NavigationView 时出错

    我按照 NavigationView 的教程进行操作 但无法解决此错误消息 Error inflating class android support design widget NavigationView 教程链接 https www
  • Android:外部存储上的 mkdirs()/mkdir() 返回 false

    我对此感到疯狂 Log d STATE Environment getExternalStorageState File f new File Environment getExternalStoragePublicDirectory En
  • RxJava android mvp 单元测试 NullPointerException

    我是 mvp 单元测试的新手 我想对演示者进行一个非常基本的测试 它负责登录 我只想断言 view onLoginSuccess 这是演示者代码 public LoginPresenter LoginViewContract loginVi
  • Android Lollipop 中应用程序外部配置文件和内部配置文件之间的数据传输

    相关问题安卓工作版 我的应用程序是一个设备管理员特权应用程序 现在我修改了创建托管工作配置文件并将其自身设置为配置文件所有者的代码 问题是 如果我upgrade我的应用程序 它成为设备管理员的配置文件所有者 现在将会有两份我的应用程序 一个
  • Recyclerview项目点击涟漪效果[重复]

    这个问题在这里已经有答案了 我正在尝试添加Ripple影响到RecyclerView的项目 我在网上查了一下 但找不到我需要的东西 我努力了android background归因于RecyclerView本身并将其设置为 android
  • 从 Dropbox 下载文件并将其保存到 SDCARD

    现在我真的很沮丧 我想从 Dropbox 下载一个文件并将该文件保存到 SD 卡中 我得到的代码为 private boolean downloadDropboxFile String dbPath File localFile throw
  • Android ClassNotFoundException:在路径上找不到类

    10 22 15 29 40 897 E AndroidRuntime 2561 FATAL EXCEPTION main 10 22 15 29 40 897 E AndroidRuntime 2561 java lang Runtime

随机推荐

  • 一个简单的外部系统调用接口日志记录demo

    一 实现思想 抽取接口共方法 作为抽象类 然后不同业务实现类继承此抽象类 实现具体业务 分析可知公共部分就是将外系统入参和接口返回参数记录到数据库 将其抽取出来 作为基础抽象类的公共方法 业务类继承此抽象类 使得不用在每一个业务实现类里面重
  • Selenium基础 — Selenium自动化测试框架介绍

    1 什么是selenium Selenium是一个用于Web应用程序测试的工具 只要在测试用例中把预期的用户行为与结果都描述出来 我们就得到了一个可以自动化运行的功能测试套件 Selenium测试套件直接运行在浏览器中 就像真正的用户在操作
  • spring+springMVC+MyBatis 分页功能代码封装

    页面效果图展示 分页工具类 Pagination package com wlsq kso util import java io Serializable import java util ArrayList import java ut
  • 【uniapp】原生子窗体subNvue的使用与踩坑

    需求 最近接到个需求 需要在video组件上弹出弹窗 也就是覆盖video这个原生组件 未播放时 弹窗可以覆盖 但是当video播放时 写的弹窗就覆盖不了了 因为video是原生组件 层级非常高 普通标签是覆盖不了的 map标签同理 覆盖原
  • 【前端】Bad control character in string literal in JSON解决方案(详解),JSON.parse(str)/Uncaught SyntaxEr报错解决方法。

    问题描述 let text fail station FSW WELDING DRY 2 r n fail resourceid 200118223 r n fail timestamp 2022 12 17 JSON parse text
  • 宝塔部署Springboot项目与踩坑

    目录 1 宝塔硬件方面 2 转储数据库 3 开放端口 4 打包maven项目 1 宝塔硬件方面 首先在宝塔上安装完成mysql与Tomcat 然后在MySQL的配置文件中添加 skip grant tables 重载配置并启动 注意可能会启
  • tomcat下CSS失效

    项目改界面的时候 把新界面套用到原有页面上去 总是不正常 有部分CSS显示不出来 弄了半天才发现 原来是tomcat缓存的问题 把tomcat的缓存 也就是work文件夹下的相关文件删除就正常了 具体原因好像是因为 tomcat的jsp文件
  • 16.BIO、NIO、AIO 有什么区别?

    简单介绍 BIO 就是传统的 java io包 它是基于流模型实现的 交互的方式是同步 阻塞方式 也就是说在读入输入流或者输出流时 在读写动作完成之前 线程会一直阻塞在那里 它们之间的调用时可靠的线性顺序 它的优点就是代码比较简单 直观 缺
  • Python分析

    一 前言 大家好 首先说明的是 这是一篇技术文 也是一篇not技术文 今天分享的是 当我获取了微信小程序英文取名的3500多个微信用户昵称 年龄段后 分析得到下面解果 二 Let s get it 1 基本信息获取 1 访问英文取名的用户基
  • 可视化修改SQL服务器名字,修改sql server服务器名称

    SQLServer复制需要有实际的服务器名称才能连接到 修改完后 重启SQL SERVER服务 第二种情况下 为远程服务器增加 别名 使用别名代替IP地址来连接远程数据库服务器 我自己用的是SQL SERVER2012 打开SQL SERV
  • selenium⼊⻔到放弃-------->学会了就是玩,能玩出花来

    目录 爬虫和反爬虫之间的斗争 爬虫的建议 动态HTML技术了解 获取ajax数据的方式 selenium chromedriver获取动态数据 selenium 下载chromedriver 安装Seleniumselenium入门 Chr
  • vue3 子组件向父组件传递数据,函数

    父组件向子组件传递参数请看 父组件vue3 setup 父组件向子组件传递参数 子组件 defineExpose 暴露uid name参数和sonToFather的方发 在setup语法糖里面defineExpose不用import引入直接
  • SummaryWriter的使用

    from torch utils tensorboard import SummaryWriter import numpy as np from PIL import Image writer SummaryWriter logs ima
  • el表达式和jstl标签库

    el表达式 只用于jsp页面中 el表达式的最初提出来的时候的作用 1 可以从域对象中获取数据 比较简单 获取域对象内容的表达式 pageContext request session application 2 第二种用法 在el表达式中
  • 一个可以让你斩获大厂Offer的笔记、速来领取

    青春啊 永远是美好的 可是真正的青春 只属于这些永远力争上游的人 永远忘我劳动的人 永远谦虚的人 最近收到不少的优秀学生投稿 他们有投稿手写笔记 有手写博客 也还有视频 小编也从中挑出几篇较为优秀的文章 下面一起看看吧 C认证优秀学员笔记又
  • HashMap多线程造成了CPU100%,死循环

    resize 方法的时候是罪魁祸首
  • STM32F1xx IAP跳转App 后中断异常及解决

    网上看到一些网友遇到STM3F1xx系列编写IAP程序经常遇到跳转到App后中断异常的问题 如一触发串口接收中断就复位等 现梳理如下 其实引起上述异常的根本原因就是 共用一组件 中断无入口 如 IAP程序中配置并打开了USART1接收中断
  • 使用Vue实现div上下收缩动画效果

    封装组件
  • springboot原理

    1 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • ConstrainLayout解决复杂的嵌套布局

    最近 项目比较忙 没什么时间写博客 今天我要讲的是 项目中复杂的嵌套布局你讲采取何种方式呢 如果按常规方式去做 估计你做完一个界面 估计够呛 我将推荐你们使用谷歌推出的ConstrainLayout 虽然还没有出正式版本 但用于复杂嵌套布局