【UI篇4】关于布局的思考

2022-04-07  本文已影响0人  农民工Alan

不积跬步,无以至千里,不积小流,无以成江海

前言
自从业以来,关于Layout,Google更新添加了多次,一直未进行整体的思考和总结。时间一长,便越发地感觉混乱和不清晰,遂决定抽时间思考整理一下,一是为了让自己的思路更加清晰;二是作为忘记时可以顺手捡起的笔记。

布局

Google官方指南的定义为:布局定义了应用中的界面结构,布局中的所有元素均使用ViewViewGroup对象的层次结构进行构建。

一、布局的分类

视图的设计原则是:嵌套的布局越少,布局的绘制速度越快(扁平的视图层次结构优于深层的视图层次结构),应尽量使用可以保持布局层次结构扁平的布局。

为了熟练使用布局,我们必须对布局的分类以及用法如数家珍,以下即列出常用的布局。

1. LinearLayout(线性布局)

用于使所有子视图在单个方向保持对齐,目前Google官方推荐改用ConstraintLayout

2. RelativeLayout (相对布局)

以相对位置显示子视图的视图组,目前Google官方推荐改用ConstraintLayout

偏移margin和填充padding
Margin:设置组件和父容器的边距,又叫偏移
Padding:设置组件内部元素间的边距,又叫填充

3. FrameLayout(帧布局)

默认从左上角渲染,新的元素覆盖之前的元素

4. GridLayout(网格布局)

以网格形式显示子View

1.可以设置布局中组件的排列方式
2.可以自定义网格行数、列数
3.可以定义组件位于几行几列
4.容器中的组件可以跨多行也可以跨多列

5. TableLayout(表格布局)

界面元素以表格显示,以行和列显示子级view元素
加一个tableRow就会增加一行,而TableRow中子控件数量决定列数,TableLayout的列数由所有tableRow中最多组件个数决定。

6. ConstraintLayout (约束布局)

Android Studio默认布局,主要是为了解决布局嵌套过多的问题

7. CoordinateorLayout (协调者布局)

需要研究补充上

8. WebView (网页视图)
9. CardView(卡片式布局)

用于在卡片内显示信息。这些卡片会以默认高程绘制到屏幕上,可以使用card_view:cardElevation属性为卡片提供自定义高程。高程值越大,绘制的阴影越明显,高程值越小,阴影越淡。

需要注意的是:CardView的圆角会有毛边,如果不满足要求的情况下,需要自定义。

二、 控件的介绍

Android 原生核心控件一览

1. TextView 文本框

TextViewdrawableTop CompoundDrawable

2. EditText 输入框
3. Button 按钮

按钮包含文本或图标,可表明当用户触摸它时会引发哪种操作。

4. RadioButton 单选按钮

单选按钮可让用户从一系列选项中选择一个选项。对于可选项相互排斥的情况,如果您认为用户需要并排看到所有可用选项,则应使用单选按钮。如果没必要并排显示所有选项,则应改用Spinner


关键类
5. CheckBox 复选框

复选框可让用户从一系列选项中选择一个或多个选项。通常,您应以垂直列表形式显示每个复选框选项。


6. ToggleButton 开关按钮

通过切换按钮,用户可在两种状态之间更改设置。


7. Switch 开关
8. ProgressBar 进度条
9. ScrollView 滚动条
10. Spinner 微调框

微调框提供了一种方法,可让用户从值集内快速选择一个值。默认状态下,微调框显示其当前所选的值。轻触微调框可显示下拉菜单,其中列有所有其他可用值,用户可从中选择一个新值。



关键类

// Get a Spinner and bind it to an ArrayAdapter that
// references a String array.
val spinner1: Spinner = findViewById(R.id.spinner1)
val adapter1 = ArrayAdapter.createFromResource(
        this, R.array.colors, android.R.layout.simple_spinner_item)
adapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
spinner1.adapter = adapter1
11. AdapterView

AdapterView 是一个 ViewGroup,用于显示加载到适配器中的项。最常见的适配器类型来自基于数组的数据源。
AdapterView 子类:
[ListView](https://developer.android.com/reference/android/widget/ListView),
[GridView](https://developer.android.com/reference/android/widget/GridView),
[Spinner](https://developer.android.com/reference/android/widget/Spinner)
[Gallery](https://developer.android.com/reference/android/widget/Gallery)

Adapter 子类:

三、布局的使用

布局的使用技巧:如果布局的内容是动态内容或未预先确定的内容,则可以使用 AdapterView 的布局,在运行时用视图填充布局。通过将AdapterView实例与Adapter绑定来填充AdapterView。

AdapterView 子类:
Adapter 子类:

四、 界面的开发

拿到视觉稿开始,我们要做的就是按照以下的步骤进行分析拆解:

  1. 界面分析
    层结构分析(层间叠加关系)--> 页面布局分解(纵向分解-->横向分解)-->子布局分解
  2. 布局设计
    需求澄清-->最佳布局方案(抽象公用布局 id浪费、merge标签减少层次、懒加载)-->性能核查(线性布局权重会导致多一次onMeasure、onLayout, GPURender核查渲染性能)
  3. 分辨率适配
  4. 处理兼容模式
  5. 特效设计

五、常见属性解读

此处想到了再补充

上一篇 下一篇

猜你喜欢

热点阅读