【达内课程】布局控件之 GridLayout 和 AbsoluteLayout

2024-05-12 10:32

本文主要是介绍【达内课程】布局控件之 GridLayout 和 AbsoluteLayout,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • GridLayout
  • AbsoluteLayout

GridLayout

介绍
网格布局是 Android 4.0 之后添加的布局,跟 TableLayout 有点像,但更加好用,它把容器分为一个 rows*columns 的网格,每个网格都是一个组件位,可是通过设置让组件位占据多行/列。

与之相似地,还有一个叫做 GridView 的组件,无论功能和名称都很相似,不过GridView 使用 Adapter 来填充组件位,GridLayout 则要简化得多。

GridLayout 本身的属性

属性对应方法属性说明
android:columnCountsetColumCount(int)设置布局的最大列数
android:rowCountsetRowCount(int)设置布局的最大行数
android:alignmentModesetAilgnmentMode(int)设置布局的对其方式(alignBounds: 对齐子视图边界;alignMargins: 对齐子视图边距;)
android:columnOrderPeservedsetColumOrderPreserved(boolean)设置容器是否保留列序号
android:rowOrderPeservedsetRowOrderPeserved(boolean)设置容器是否保留行序号
android:useDefaultMarginssetUseDefaultMargins(boolean)设置容器是否使用默认的页边距

针对容器内的子组件的属性

属性作用
android:layout_column指定该单元格在第几列显示
android:layout_row指定该单元格在第几行显示
android:layout_columnSpan指定该单元格占据的列数
android:layout_rowSpan指定该单元格占据的行数
android:layout_gravity指定该单元格在容器中的位置
android:layout_columnWeight(API21加入)列权重
android:layout_rowWeight(API21加入) 行权重

这里的 LayoutGravity 跟一般的 LayoutGravity 有点区别,这里的摆放位置是相对于所属网格的,而不是对于布局父容器来说的。

android:layout_gravity作用
center不改变元素的大小,仅居中
center_horizontal不改变大小,水平居中
center_vertical不改变大小,垂直居中
top不改变大小,置于顶部
left不改变大小,置于左边
bottom不改变大小,置于底部
right不改变大小,置于右边
start不改变大小,根据系统语言,置于开始位置
end不改变大小,置于结尾
fill拉伸元素控件,填满其应该所占的格子
fill_vertical仅垂直方向上拉伸填充
fill_horizontal仅水平方向上拉伸填充
clip_vertical垂直方向上裁剪元素,仅当元素大小超过格子的空间时
clip_horizontal水平方向上裁剪元素,仅当元素大小超过格子的空间时

举例:GridLayout 练习,实现计算器效果

xml

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:columnCount="4"android:rowCount="6"><!--6行4列 实现占满整个屏幕--><!--跨四列 自动填充 权重2--><EditTextandroid:layout_rowWeight="2"android:layout_columnSpan="4"android:layout_gravity="fill_horizontal"android:hint="数值" /><!--列 行权重为1--><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="清除"android:textColor="#00F"android:textSize="20dp" /><!--列 行权重为1--><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="后退"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="/"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="x"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="7"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="8"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="9"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="-"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="4"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="5"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="6"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="+"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="1"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="2"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="3"android:textSize="20dp" /><!--跨两行 自动填充 绿色 列权重1 行权重2--><Buttonandroid:layout_rowSpan="2"android:layout_rowWeight="2"android:layout_columnWeight="1"android:layout_gravity="fill_vertical"android:background="#22ac38"android:text="="android:textSize="20dp" /><!--跨两列 自动填充 列权重2 行权重1--><Buttonandroid:layout_rowWeight="1"android:layout_columnSpan="2"android:layout_columnWeight="2"android:layout_gravity="fill_horizontal"android:text="0"android:textSize="20dp" /><Buttonandroid:layout_rowWeight="1"android:layout_columnWeight="1"android:text="."android:textSize="20dp" /></GridLayout>

运行结果:
在这里插入图片描述

解决 API<21 时 GridLayout 平均分配格行/列的问题

问题:GridLayout 在 API21 时引入了Android:layout_columnWeightandroid:layout_rowWeight来解决平分问题,但是 api21 前就不可以使用,这是需要引入兼容包

compile 'com.android.support:gridlayout-v7:25.+'

使用如下:

<android.support.v7.widget.GridLayoutapp:layout_columnWeight="1" app:layout_rowWeight="1" ......
/>

AbsoluteLayout

介绍

绝对布局 AbsoluteLayout 通过指定组件的确切X、Y坐标来确定组件的位置。在 Android2.3 以被弃用,不推荐使用。以下教程仅作为了解。

属性
android:layout_x设置组件的X坐标
android:layout_y设置组件的Y坐标

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:id="@+id/Button01"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_x="10dp"android:layout_y="20dp"android:text="A" /><Buttonandroid:id="@+id/Button02"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_x="100dp"android:layout_y="20dp"android:text="B" /></AbsoluteLayout>

运行结果:
在这里插入图片描述

这篇关于【达内课程】布局控件之 GridLayout 和 AbsoluteLayout的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/982379

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

lvgl8.3.6 控件垂直布局 label控件在image控件的下方显示

在使用 LVGL 8.3.6 创建一个垂直布局,其中 label 控件位于 image 控件下方,你可以使用 lv_obj_set_flex_flow 来设置布局为垂直,并确保 label 控件在 image 控件后添加。这里是如何步骤性地实现它的一个基本示例: 创建父容器:首先创建一个容器对象,该对象将作为布局的基础。设置容器为垂直布局:使用 lv_obj_set_flex_flow 设置容器

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

小程序button控件上下边框的显示和隐藏

问题 想使用button自带的loading图标功能,但又不需要button显示边框线 button控件有一条淡灰色的边框,在控件上了样式 border:none; 无法让button边框隐藏 代码如下: <button class="btn">.btn{border:none; /*一般使用这个就是可以去掉边框了*/} 解决方案 发现button控件有一个伪元素(::after

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

【CSS in Depth 2 精译_023】第四章概述 + 4.1 Flexbox 布局的基本原理

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高2.6 自定义属性2.7 本章小结 第三章 文档流与盒模型(已

《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》P98

更改为 差分的数学表达式从泰勒级数展开式可得: 后悔没听廖老师的。 禹晶、肖创柏、廖庆敏《数字图像处理(面向新工科的电工电子信息基础课程系列教材)》 禹晶、肖创柏、廖庆敏《数字图像处理》资源二维码

MFC 控件重绘(2) NM_CUSTOMDRAW, WM_DRAWITEM, 虚函数DrawItem

控件重绘有三种方法: 1 设定界面属性 2 利用Windows的消息机制,通过Windows消息映射(Message Mapping)和反映射(Message Reflecting),在合适的时机修改控件的状态和行为。此方式涉及NM_CUSTOMDRAW和WM_DRAWITEM 3 利用虚函数机制,重载虚函数。即DrawItem虚函数。 对于NM_CUSTOMDRAW,某些支持此消息的控件

ConstraintLayout布局里的一个属性app:layout_constraintDimensionRatio

ConstraintLayout 这是一个约束布局,可以尽可能的减少布局的嵌套。有一个属性特别好用,可以用来动态限制宽或者高app:layout_constraintDimensionRatio 关于app:layout_constraintDimensionRatio参数 app:layout_constraintDimensionRatio=“h,1:1” 表示高度height是动态变化

html记账本改写:数据重新布局,更好用了,没有localStorage保存版本

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><title>htm记账本</title><style>table {user-select: none;/* width: 100%; */border-collapse: collapse;}table,th,td {border: 1px solid bla