类概述
这个类代表了用户接口组件的最基本的构建。一个视图在屏幕上占有一块矩形区域并且负责绘画和事件处理。视图是最基本的部件类,它常常被用来创建可交互的UI组件(按钮、文本域等)。ViewGroup子类是最基本的布局类,它是一种无形的容器,这个容器不仅可以包含其他视图或者其他容器,同时还可以定义其他容器或视图的布局属性。
开发入门
有关这个使用这个类开发你的应用程序的用户接口信息,请参阅用户接口开发者入门文档。
使用View
在一个窗口中的所有view都被按一定顺序排列在一个单独的树结构中。你或者可以中源代码中增加View,或者被指定在一个或更多个XML布局文件中指定。在Android API中,有许多View特定的子类。它们有的充当控制角色,有的能够显示文本、图片或者其他的内容。
首先你要创建一个视图树,你希望执行的有代表性的公共方法:
- 设置属性:例如设置TextView的文本,这个可用的属性和在不同的View子类之中设置改变它们的方法。需要注意的是在构建时就知道的属性值能被设置到XML布局文件里。
- 创建监听器:所有视图允许设置监听到客户端,当一些感兴趣的事情发生在一个视图上时这个监听将会被通知。例如,当视图得到或失去焦点时你对所有视图设置的监听都会收到通知。你能够使用setOnFocusChangeListener(android.view.View.OnFocusChangeListener)方法注册一个监听。其他的视图子类会提供更多的特定视图的特有的监听。例如,当一个按钮被单击时,这个按钮产生一个监听通知客户端。
- 设置可见性:你可以使用setVisibility(int)方法隐藏或显示视图。
实现自定义视图
唯一标识
- 在xml布局文件中定义一个按钮并且分配一个唯一ID。
<Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/my_button_text"/>
- 在Activity的onCreate方法中查找这个按钮
Button myButton = (Button) findViewById(R.id.my_button);
视图的位置
视图的大小和内边距以及外边距
布局
- 一个精确的数字
-
MATCH_PARENT,意思是这个视图的宽高和它的父视图的宽高一样大小(最小内边距)。
-
WRAP_CONTENT,意思是这个视图的宽高仅仅能够包裹住它的内容即可(增加内边距)。
MeasureSpecs 常常被用来作为测量的必要条件。一个测量细则可以使用下列3种模式之一:
-
UNSPECIFIED:这种模式常被父视图用来确定子视图渴望的尺寸大小。例如,LinearLayout调用measure()方法,在它的一个子视图上设置其高度为UNSPECIFIED,设置其宽度为精确值240像素,那么这个子视图的高度将会是和宽度值相等都为240像素。
-
EXACTLY:这种模式常被父视图强加给子视图一个精确的大小。这个子视图必须使用这个大小并且确保该视图的所有子节点都在这个大小之内。
-
AT_MOST:这个模式常被父视图用来强加最大的大小到这个子视图上。子视图必须确保它和它的所有子节点都在这个大小之内。
图像
事件处理和事件线程
基本的绘制视图循环是:- 当一个事件发生时,anroid系统会将这个事件分发给合适的视图。这个视图会处理这个事件并且通知每一个监听器。
- 如果在处理这个事件的过程中,视图的边界需要改变,则该视图将会调用requestLayout()方法。
- 类似的,如果在处理事件过程中,视图的外观需要改变,则该视图会调用invalidate()方法。
- 如果requestLayout()方法和 invalidate()方法有一个被调用,那么android框架用合适的方法来测量、布局、绘制这个视图树。