《宅男的android开发指南》(翻译)--4
=====================================
这一次的内容比较多,下面是节选
====================================
使用Containers容器来进行布局
简单而言,我们使用各种layout布局类,来保存系统提供的小部件(Widget)。在前面我们已经介绍了,android中使用基于xml文件的布局,所以我们要了解,在android中,有哪些布局,以及如何使用xml来显示各种界面。
Android,虽然有LinearLayout(线性布局),也提供了其他的一些支持。我们接下来会先介绍Linearlayout。然后会介绍其他的:RelativeLayout(相对布局)和Tablelayout(表格布局),以及使用ScrollView(可滚动视图)
了解LinearLayout
可以看到,线性布局是继承自ViewGroup的
我们可以先看下ViewGroup 因为我们的UI界面,通常不会只有一个view视图的,所以android提供了这个ViewGroup的抽象类,类似于之前看到的Radiogroup. 在ViewGroup中定义了可以添加View的方法 你可以随意的向它的子类中添加各种视图,用于程序代码中动态生成界面。 特别注意的是下面这个方法:
我们可以通过ViewGroup.LayoutParams这类,把一个View作为布局中的一个元素,动态添加到界面中去。 我们在后面还会遇到这些 |
刚才说了,LinearLayout是线性布局,也成为盒子(Box)模型:其中的小部件或者子容器(布局是可以嵌套的哦),都是按照线性(行,或者列)的方式一个挨着一个的排列的。类似于javaswing中的FlowLatout。
概念和属性
要是用LinearLayout,你可能会遇到下面的几个需要设置的属性,以控制容器的内容:
分别是 the orientation(水平方向),the fill model (填充方式),the weight(重量),the gravity(排列方向),以及the padding(间距)、下面分别介绍
the orientation(水平方向)
the orientation(水平方向)表示布局中的小部件,是按照行还是按照列排列。
添加android:orientation属性,可以设置horizontal水平(按行)排列,或者vertical垂直(按列)排列
Ps: orientation的值可以在运行时,通过调用LinearLayout类的setOrientation()方法来设置。以调整水平还是垂直排列。
Fill Model(填充模式)
一般来说,小部件都需要设置宽度和高度。那么宽度和高度的值,就称为填充.
我们可以通过
Android:layout_width和android:layout_height属性来设置。
我们一般可以通过如下三种方式来设置值:
l 可以提供具体的尺寸(dimension),比如125px,表示125个像素
l 可以提供wrap_content ,表示这个小部件会填充它的自然(初始)空间大小,一般除非它很大,都会按照系统自带的属性来填充属于它本来自己的空间的。
l 可以使用fill_parent ,表示小部件会填充满从它的位置开始,到所在的容器剩余的位置,其他的在它之后的小部件就会被掩盖掉(忽视掉,屏幕中看不到后面的小部件了)
后面的两种填充模式是常用的。因为他们是独立于屏幕尺寸的,会自适应。根据不同的设备,会自己调整大小一遍适应设备。
Weight(比重)
但是,如果我们需要两个小部件来分配容器中剩余的空间,我们该怎么办呢?比如,有两个多行输入的文本区域,按照列的方式排列。我们希望两个把剩余的填充满(什么意思呢?如果按照之前的wrap_方式,只能填充小部件自己的尺寸,如果按照fill_方式,只会显示其中一个,除非按照第一种方式,但是这种方式不能保证手机设备的自适应),所以我们这个时候就会用到weight这个属性了
为了达到这种目的,我们可以添加 android:weight属性(不论是按照列还是行来排列,他们都是采用 fill的填充方式),这个weight属性表示这些小部件所占据的剩余空间的比例。
如果,你设置了这两个小部件的 weight的值都一样,那么他们俩就会占据剩下空间的1/2(此时, android:weight都可以设置为1,表示1:1),如果一个设置1,另一个设置 2,那么前面一个就占有1/3,后一个占有2/3
Gravity(对齐方向)
默认情况下,所有的小部件都是左对齐 (left)和置顶(Top)的。如果你希望按照自己的方式来对齐的话,可以设置一些特殊的值。
我们可以通过属性
Android:layout_gravity 或者调用方法 setGravity()来设置。
一般对应的值有
Left,center_horizontal,center_vertical right,等。。
Padding(间距)
默认情况下,小部件之间都是紧紧挨着的。如果你希望部件之间有些间距,那么可以通过设置padding来达到目的。
使用 android:padding 或者 setpadding()
我们直接通过下面的图来看就很容易明白这个属性的意思(其实,学习了html的同学,会很容易理解的)
Android:padding 设置的是四个方向都一样的值
如果希望设置某一边的,可以选择
Android:paddingLeft ,android:paddingRight,android:paddingTop,android:paddingBottom
他们对应的值均是像素值,比如 5px
下面我们看一个例子吧:
首先是布局文件
布局文件显示
界面中有两组单选按钮,只要选中一个按钮,就会让界面布局发生变化
分别是:水平,垂直,左,中,右的效果
那么我们看下Activity代码
代码很简单,在onCreate()方法中,我们实例化了布局中的两个RadioGroup,并分别给他们注册了监听器。用于监听单选按钮的状态,即setOnCheckedChangeListener(this)..
因为我们定义的Activity这个类的时候,让它实现了OnCheckedChangeListener这个接口。那么这个Activity本身就是一个监听器啦~~~^_^
在回调方法onCheckedChange()中,我们看到了每个按钮组的变化。
《宅男的android开发指南》(翻译)--4相关推荐
- 《Using OpenRefine》翻译~12
上一篇:<Using OpenRefine>翻译~11 点4:单元格值转换 在第二章:分析和修改数据中,我们学习到OpenRefine可以自动修改一列的单元格内容,比如去除多余空格.上一点 ...
- 《Using OpenRefine》翻译~4
上一篇:<Using OpenRefine>翻译~3 要点5:使用项目操作历史 本点中,你将学习到如何返回到任一个项目历史操作点,并且学习如何在项目重新打开后查看历史操作信息. OpenR ...
- Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译
Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...
- “Attention is All You Need 翻译
<p><img src="output_0_0.png" alt="png"></p> "Attention is ...
- 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qysh123/article/deta ...
- 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...
- 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler
全文翻译(四) TVM An Automated End-to-End Optimizing Compiler 6.3 嵌入式GPU评估 对于移动GPU实验,在配备ARM Mali-T860MP4 G ...
- 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler
全文翻译(三) TVM An Automated End-to-End Optimizing Compiler 5. 自动化优化 考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算 ...
- 全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 3.优化计算图 计算图是在DL框架中表示程序的常 ...
- 全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning
全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样的硬件 ...
最新文章
- 对于大数据大流量情况下微软架构的水平扩展的遐想(瞎想)
- html标签在html页面正常显示而不被解析
- 数据库分离 附加 sqlserver
- 手游方舟怎么输入代码_明日方舟再次登顶失败,为了不发十连奖励,鹰角实力控分?...
- A Brief Overview Of Vulkan API
- three.js加载OBJ格式模型(vue中使用three.js51)
- html5饼图的制作方法,excel2010复合饼图制作方法
- 基于单片机原理的暖风机控制系统设计-毕设课设资料
- PWmat案例赏析:计算精度高、速度快的第一性原理计算,研究表面终端结构对NV色心影响
- 报错Cannot mix different versions of joi schemas解决方法
- 自制智能手机电话APP
- 分形图java_数字的美丽——分形图形
- 技术人员升级打怪的方法论
- DSNet: A Flexible Detect-to-Summarize Network for Video Summarizationa论文笔记
- 架构师成长之路(4)--高可用高并发架构(图谱)
- 2021/9/4王者荣耀服务器崩掉
- 基本功short与Unsigned short以及Java基本类型
- grep、cut常见用法
- 2022年终总结:不再用“拼命”来应对极度的不安全感
- metasploit初识|外围情报搜索