=====================================

这一次的内容比较多,下面是节选

====================================

使用Containers容器来进行布局

简单而言,我们使用各种layout布局类,来保存系统提供的小部件(Widget)。在前面我们已经介绍了,android中使用基于xml文件的布局,所以我们要了解,在android中,有哪些布局,以及如何使用xml来显示各种界面。

Android,虽然有LinearLayout(线性布局),也提供了其他的一些支持。我们接下来会先介绍Linearlayout。然后会介绍其他的:RelativeLayout(相对布局)和Tablelayout(表格布局),以及使用ScrollView(可滚动视图)

了解LinearLayout

可以看到,线性布局是继承自ViewGroup

我们可以先看下ViewGroup

因为我们的UI界面,通常不会只有一个view视图的,所以android提供了这个ViewGroup的抽象类,类似于之前看到的Radiogroup.

在ViewGroup中定义了可以添加View的方法

你可以随意的向它的子类中添加各种视图,用于程序代码中动态生成界面。

特别注意的是下面这个方法:

void

addView(View child, ViewGroup.LayoutParams params)

Adds a child view with the specified layout parameters.

我们可以通过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相关推荐

  1. 《Using OpenRefine》翻译~12

    上一篇:<Using OpenRefine>翻译~11 点4:单元格值转换 在第二章:分析和修改数据中,我们学习到OpenRefine可以自动修改一列的单元格内容,比如去除多余空格.上一点 ...

  2. 《Using OpenRefine》翻译~4

    上一篇:<Using OpenRefine>翻译~3 要点5:使用项目操作历史 本点中,你将学习到如何返回到任一个项目历史操作点,并且学习如何在项目重新打开后查看历史操作信息. OpenR ...

  3. Mysql函数group_concat、find_in_set 多值分隔字符字段进行数据库字段值翻译

    Mysql函数group_concat.find_in_set进行数据库字段值翻译 场景 配方表:记录包含的原料 sources表示原料,字段值之间用逗号分隔 原料表:对应原料id和原料名称 现需要查 ...

  4. “Attention is All You Need 翻译

    <p><img src="output_0_0.png" alt="png"></p> "Attention is ...

  5. 基于PyTorch的Seq2Seq翻译模型详细注释介绍(一)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qysh123/article/deta ...

  6. 全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(全文合集):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样 ...

  7. 全文翻译(四) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(四) TVM An Automated End-to-End Optimizing Compiler 6.3 嵌入式GPU评估 对于移动GPU实验,在配备ARM Mali-T860MP4 G ...

  8. 全文翻译(三) TVM An Automated End-to-End Optimizing Compiler

    全文翻译(三) TVM An Automated End-to-End Optimizing Compiler 5. 自动化优化 考虑到一组丰富的调度原语,剩下的问题是为DL模型的每一层,找到最佳的算 ...

  9. 全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(二): TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 3.优化计算图 计算图是在DL框架中表示程序的常 ...

  10. 全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning

    全文翻译(一):TVM: An Automated End-to-End Optimizing Compiler for Deep Learning 摘要 人们越来越需要将机器学习应用到各种各样的硬件 ...

最新文章

  1. 对于大数据大流量情况下微软架构的水平扩展的遐想(瞎想)
  2. html标签在html页面正常显示而不被解析
  3. 数据库分离 附加 sqlserver
  4. 手游方舟怎么输入代码_明日方舟再次登顶失败,为了不发十连奖励,鹰角实力控分?...
  5. A Brief Overview Of Vulkan API
  6. three.js加载OBJ格式模型(vue中使用three.js51)
  7. html5饼图的制作方法,excel2010复合饼图制作方法
  8. 基于单片机原理的暖风机控制系统设计-毕设课设资料
  9. PWmat案例赏析:计算精度高、速度快的第一性原理计算,研究表面终端结构对NV色心影响
  10. 报错Cannot mix different versions of joi schemas解决方法
  11. 自制智能手机电话APP
  12. 分形图java_数字的美丽——分形图形
  13. 技术人员升级打怪的方法论
  14. DSNet: A Flexible Detect-to-Summarize Network for Video Summarizationa论文笔记
  15. 架构师成长之路(4)--高可用高并发架构(图谱)
  16. 2021/9/4王者荣耀服务器崩掉
  17. 基本功short与Unsigned short以及Java基本类型
  18. grep、cut常见用法
  19. 2022年终总结:不再用“拼命”来应对极度的不安全感
  20. metasploit初识|外围情报搜索

热门文章

  1. windows任务栏黑屏不响应?
  2. CC2640R2F BLE5.0 蓝牙协议栈GAP Bond管理和LE安全连接
  3. matplotlib中绘图常用函数
  4. ArcGIS字段计算器中的python函数(转发)
  5. Err.number错误号和可捕获的 Microsoft access 数据库引擎和 DAO错误说明
  6. 谈谈privoxy:关于广告过滤和自动代理切换
  7. Swift - 描边文字效果
  8. 盒子模型之免费体验登录页面
  9. butter滤波器是iir吗_学习随笔之IIR滤波器与FIR滤波器
  10. 1.OpenCV介绍