Android-UI编程笔记一 | 青训营笔记

136 阅读3分钟

这是我参加【第四届青训营】笔记创作活动的第6天

UI组件

在Android中,Android通过android.widget包提供大量的基础ui组件,包括文本组件、图片组件、输入框组件等。这些组件通过xml文件标签的方式或者也可以通过编写代码实现组件类的方式实现各种组件在页面的显示功能。

这些组件可以根据需求通过我们对其的属性值修改实现我们想要的显示效果,比如最常见的几种基本属性id、组件高度height、组件宽度width、控件相对父布局的距离margin等。有的组件有自己独特的属性,比如有关图片显示的控件可以设置其图片地址的属性src、有关按钮的组件可以设置其是否可点击的属性checked,等等。

组件之间也有一些关联,有的组件通过继承其他组件,所以也拥有其它组件的一些相应的属性。所有的组件都集成了View,View为组件的标识类。ViewGroup为控件集群可以存放多个控件。

布局

布局可以实现将处于布局内的组件进行有规律的陈列显示。

LinearLayout

线性布局,可以将组件进行水平或者垂直方向的有序陈列显示,适用于水平直线排列显示或者垂直直线排列显示,添加的新组件依次按照线性排列的顺序显示。

RelativeLayout

相对布局,通过选择已存在的组件或者父容器的位置进行相对的排列显示,比如相对与父容器居中、相对于父容器靠左、在已存在的组件上侧、在已存在的组件右侧等。

FrameLayout

帧布局,通过一层一层叠加的方式排列组件,视图效果就是组件覆盖显示。

ConstraintLayout

约束布局,类似于相对布局,但是要比相对布局复杂,可以完全通过已经确定的组件进行各种属性的设置,比如组件的上侧相对于一个已知组件的下侧的相对位置等等。使得组件的显示样式更加多样化。

而且各种布局之间也能嵌套使用,这是四种常用布局,Android和第三方还提供其它的布局。

布局加载

在activity中实现布局的加载,具体通过在实现继承Android活动类后实现重写的onCreate方法中通过setContentView()方法实现xml文件布局的加载。通过代码实现组件创建时会通过LayoutInflater实现控件的加载,setContentView方法最后也是通过LayoutInflater来加载控件。

布局解析

LayoutInflater解析XML文件,通过XML文件生成View对象,最后将View对象添加到最近的ViewGroup中,实现布局的解析。

布局渲染

页面绘制的参与者为Window,最后也是通过Window实现页面显示。

UI渲染会首先通过CPU进行数据的收集,再通过GPU利用有用的数据进行执行需要的操作为合成页面做准备,最后再通过Graphics生成页面完成渲染。