Android常规&高级UI编程

在Android的UI编程中,开发者会用到许多UI组件,比如文本框、图像框乃至列表、输入框等等;而在设计UI时,又需要了解各种布局方式;更进一步,还需要加上一些动画效果。下面逐一来介绍它们。

UI组件

Android应用的UI界面就是由一个个UI组件构成的,Android SDK提供了大量UI组件供开发者选择,当然开发者也可以选择自定义UI组件。这里介绍一些常用的UI组件:

  • TextView
    • 文本组件,用于展示文本,可以设置文字的大小、颜色等信息
    • 位于android.widget.TextView
  • ImageView
    • 图片组件,用于展示图片,可以设置图片的展示方式,比如居中拉伸、居中裁剪等等
    • 位于android.widget.ImageView
  • Button
    • 按钮组件,用于放置一个按钮,可以设置按钮的大小、按钮上的信息等
    • 位于android.widget.Button
  • EditText
    • 输入框组件,用于放置一个输入框,可以设置输入框的内容(数字、文本等)、输入框的提示信息、输入框的自动填充类型等
    • 位于android.widget.EditText
  • CheckBox
    • 复选框组件,用于放置一个复选框,可以设置默认是否被勾选等
    • 位于android.widget.CheckBox
  • RadioButton
    • 单选按钮,通常与RadioButtonGroup一起使用得到一组互斥的选择按钮,可以设置默认是否选中等。
    • 位于android.widget.RadioButton
  • ...

对于大多数UI组件,它们都有下面的一些属性:

  • id
    • 设置id,从而能够唯一地标识该组件,一般为“@+id/bala_bala”的形式
  • height
    • 设置组件高度
  • width
    • 设置组件宽度
  • margin
    • 设置组件的外边距,也就是组件和其他组件的距离
    • 左右边距、上下边距都可以单独设置
  • padding
    • 设置组件的内边距,也就是组件内部元素到组件边缘的距离,比如文本组件的内边距就是文字到组件边缘的距离
    • 左右边距、上下边距都可以单独设置
  • gravity
    • 设置组件相对于父容器的对齐方式,有居中、左对齐、右对齐等方式
  • ...

除了上面提到的像TextView一类的常规UI组件,组件容器也是一种UI组件,常见的UI组件包括LinearLayout、ConstraintLayout等布局容器组件,ListView、RecyclerView等列表组件以及ViewPager等分页组件,等等。

UI布局

有了各种组件,就需要一个容器来摆放这些组件,规定它们的大小、位置、层级等信息。这个容器就是布局容器,常用的布局容器有LinearLayout、RelativeLayout、FrameLayout、ConstraintLayout几种容器:

  • LinearLayout
    • 线性布局,按照水平或垂直方向排列UI组件,所有子视图在单个方向保持对齐
  • RelativeLayout
    • 相对布局,布局内的组件通过相对于父容器/兄弟组件的位置来排列,从而减少布局的嵌套,提高复杂场景的布局性能
  • FrameLayout
    • 以层级叠加的方式排列组件,不同于之前的布局,该布局是在Z轴方向上进行的,适用于多层叠加场景(例如:前景图和背景图的叠加)
  • ConstraintLayout
    • 约束布局,组件的位置取决于约束条件,可以使用扁平无嵌套的方式实现较复杂的布局

UI动画

在设计应用交互时,合适的动画能带来体验的巨大提升。相较于直接画面的突兀变化,通过动画进行的渐进式变化更符合人的审美要求。在Android中,系统提供了帧动画、补间动画和属性动画三种动画形式。

  • 帧动画
    • 作用于View类对象
    • 原理类似于GIF,即通过按照指定顺序和间隔播放一组图片(帧)实现的动画
    • 优点是使用简单方便,缺点是功能单一(需要设置每一帧的画面)、容易OOM(Out of Memory,因为帧动画需要存储每一帧画面)
  • 补间动画
    • 作用于View类对象
    • 原理是确定开始和结束时的视图样式后,由插值器确定中间过程的样式,从而形成完整动画
    • 有透明度动画、旋转动画、缩放动画和平移动画四种类型,可以单独使用也可以组合使用
    • 优点是简单方便,缺点是效果单一、自定义程度低
  • 属性动画
    • 可以作用于任意Java对象
    • 原理是在指定时间间隔内,不断改变对象属性的值,从而实现动画效果
    • 相较于前面的两种动画,属性动画扩充了动画的作用范围,同时能够实现丰富的动画效果

Android常规&高级UI编程
https://young-cloud-creator.github.io/android-ui/
作者
Young Cloud Creator
发布于
2022年8月21日
许可协议