Android View 学习第一篇--View 探秘

来源:互联网 发布:win7 64位仿mac主题包 编辑:程序博客网 时间:2024/06/05 06:47

咱们做Android应用开发的小伙伴们,每天接触的要么是逻辑代码(以前还可以说Java,现在Kotlin来了,不好说了),要么就是xml布局,这其中很大一部分都跟UI中的View 有关,LinearLayout、RelativeLayout、TextView、Button……,诸如此类(凡此种种),都是View(含View的子类),无论多么常见的传统控件,还是功(效)能(果)强(华)大(丽)的自定义控件,都逃不开这个View的圈圈。今天咱们来了解下关于这个View的一些小知识,或许会加深咱们对View的理解,提高自定义View的硬实力。 今天就不说Android UI层的深层原理了,仅针对View的相关内容,进行简单的知识梳理。关于View的官方文档,打开一看,网页的进度条都缩小到快看不见了,你说View里面可说的内容多不多~
官方文档:https://developer.android.google.cn/reference/android/view/View.html

1、View 初识

应用UI界面上的每个View 元素,都是一个矩形的模块,多个不同的模块,在指定的条件限制下,拼合成了我们看到的精美的UI界面。(为毛看到很多应用中的View 元素是圆的?你看QQ中的头像,就不是方的。其实所有的View控件,实质上都是方的,只是因为很多View元素为了美化效果,把不需要展示出来的地(像)方(素)设置为了透明的,在我么看起来它就不再是简单的矩形结构了)。

2、View 模型

View模型
如果学习过其他涉及UI的编程语言,应该不难理解上图的View 模型,每个View元素都是一个矩形,外面的margin(外边距)是在View 的真是大小的外围加上一个边距(可以用来控制View摆放在哪里),里面的padding(内边距)是在View的实际大小的内侧留空的一段距离(这段距离的空间里,View只能展示背景的颜色,不能显示前景),也就是说View 的实际大小,是不包含margin的,但是包含Padding,而View的前景内容,只能显示在content的范围内。 有以下几点:

  • 考虑View 占多大空间时,需要考虑把margin的尺寸计算进去;
  • 考虑View真实尺寸时,需要考虑padding和content的尺寸;
  • 一个View的最终展示效果,是由背景、前景两部分组合成的(还有其他各方面非原理性的原因,暂不讨论)。
    View模型结构

3、View 类说明

package:android.view.View;
public class View extends Object implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource{ … }

View类是所有Android控件的基类,无论是TextView这种独立的View控件,还是Linear|Layout这种ViewGroup,最终都是继承于View类,可以这样理解,View确定了UI的基本模式,具体的展示什么就是各个View子类自己定义的。
关于View的展示,主要涉及两个方法,分别是方法onMeasure(Xx x..)和onDraw(Yy y..),暂不讨论这两个方法的具体内容,仅讨论其功能。onMeasure(Xx x..)方法主要用来测量View的真实大小(即View 的宽和高,含各边padding),onDraw(Yy y..)方法主要用来绘制View中展示的内容(文字、图形等)。关于自定义View,主要是继承View之后,重写这两个方法,以达到自己期望的效果。

4、View 的属性设置

Android 的布局主要以XML格式的布局文件为主,布局文件中,每个节点都是一个View(可能是个ViewGroup,一个大的View,只是它包含了多个子View),每个节点中描述了个View 的属性(即通过View的XML属性来控制View的效果,margin、padding、background…),在Java(或Kotlin)代码中,View也有对应每个xml属性的方法,用以在代码中动态设置个View 相关属性。 例:TextView 有”android:text”属性,设置展示的文本,同时也有setText(Xx x)方法。 更多的属性,请参阅各控件的官方文档说明。

关于View的具体方法,后续文章逐步分析。