Android零基础开发专题六:android.view.View与android.view.ViewGroup
Posted on 2012-06-24 16:28 myAnd 阅读(949) 评论(0) 编辑 收藏 举报在Android SDK当中,给我们提供了很多的控件,比如按钮、下拉列表等。有了这些控件我们可以很快速的来构建用户界面,在Android当中构建用户界面我们主要用来两个核心类:View和ViewGroup。下面小彬哥就来介绍下这两个核心类。
1、android.view.View类:
我们在专题五中介绍了Activity,一个Activity就相当于手机屏幕中的一屏,但是Activity无法显示,需要借助于UI类的基类View来进行显示。View类直接继承java.lang.Object类。它的直接子类包括ViewGroup以及显示文本信息的TextView类。间接子类包括比如按钮、编辑框等UI组件。一个View类就代表了屏幕上的一块特定的区域,我们可以利用View类在这块区域上绘图、处理焦点等,当然也可以利用View类处理这块区域对应的按键、手势等交互事件的处理。所以有了View类,我们就可以为Activity创建丰富的UI了。
1.1 使用android.view.View类:
在Android中使用View类有两种方法:
1.1.1 在.java源代码文件中定义,设置相关属性,动态创建View;
1.1.2 在XML中定义,我们可以将View定义在XML布局元素中,然后在源代码中将定义好的XML文件进行关联就OK了;
第一种定义View方法比较灵活,不适合初学者进行学习,今天我们就先来介绍下在XML文件中定义View,在源代码文件中的定义小彬哥后面会跟大家详细介绍。谈到View,小彬哥就需要介绍View常见的几个属性。
android:id:唯一标识;
android:background:为当前的View设置一个背景色或背景图片;
android:focusable:是否获得焦点;
android:visibility:是否显示;
android:text:当前view的文本值;
android:layout_width、android:layout_height:宽度、高度,这两个是必须属性;
说了这么多,下面小彬哥来创建一个实例程序:
步骤如下:
在res下的layout文件夹下面的main.xml文件中进行定义如下代码,main.xml文件是描述未来显示在手机屏幕中的显示效果:
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@raw/index" > <Button android:id="@+buttonId/btnHaha" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="@string/btnHaha" /> <Button android:id="@+buttonId/btncontinue" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+buttonId/btnHaha" android:layout_centerInParent="true" android:text="@string/btnmsg" > </Button> </RelativeLayout>
小彬哥将默认的LinearLayout布局改成RelativeLayout(相对布局),RelativeLayout中添加android:background="@raw/index",这段代码表示未来显示在手机屏幕显示的背景图片,@代表引用资源文件,raw是res目录下的资源文件,index是图片名称。(注意是图片的名称,不含扩展名)。
然后添加两个Button类型的View,其中android:id="@+buttonId/btnHaha"中的+号表示将在gen资源索引中的R.java文件中自动(注意是自动,无需我们自己设置)生成一个buttonId类以及在buttonId类中定义一个静态的btnHaha变量,这样做的目的就是可以在src下面的java源代码中轻松获得这个Button类型的View信息。
android:layout_width="wrap_content":表示根据屏幕大小自动调整;
android:layout_height="wrap_content":与上同理;
android:layout_centerInParent="true":相对于未来手机屏幕,是否显示在屏幕中间。默认为false,表示不显示在中间;
android:text="@string/btnHaha":引用常量。text属性是未来这个按钮上显示文本信息。在android当中,不建议我们直接在这里编写。而是建议我们将这些常量值存放到res下values文件夹下的strings.xml文件中。
res目录下values下的strings.xml文件中定义如下:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, MainActivity!</string> <string name="app_name">AndroidTest</string> <string name="btnHaha">开始</string> <string name="btnmsg">结束</string> </resources>
所以android:text="@string/btnHaha"代码中的@string表示引用strings.xml中的string标签,后面的/btnHaha表示找到name为btnHaha的标签值,并将其显示到Button按钮中。这样,小彬哥的View就编写好了。
运行后效果如下图:
2、android.view.ViewGroup类:
下面我们再来介绍一下ViewGroup,ViewGroup继承至View,它是View的直接子类,它是View的容器控件,可以对其中的View进行管理,可以这么说,有了ViewGroup我们的UI元素就有了结构,ViewGroup就像家里的衣柜一样,我们可以将衣服根据类别进行分类摆放。需要注意的是,ViewGroup是一个抽象类,它是所有容器类控件的基类,从抽象类这三个字小彬哥就明白了,真正充当容器的是他的子类,它的直接子类包括我们刚刚说到的RelativeLayout相对布局控件等,它的间接子类比如ListView、RadioGroup等。
View与ViewGroup的关系:
根据我们刚刚创建的View代码,小彬哥发现,main.xml布局文件中的根节点就是一个ViewGroup,在这个ViewGroup下面包含了小彬哥刚刚说的View,因为main.xml是一个xml文档,小彬哥就把ViewGroup下面的View说成节点吧。你不介意吧?哈哈。小彬哥还得提醒你下,ViewGroup下面不光可以包含View,还可以包含ViewGroup呢,说的专业一点,叫什么来着...噢,对了,叫嵌套。呵呵。因为它是一个xml文档,所以整个布局文件就是一个以树形结构来定义的。程序加载这个main.xml文档时,先调用ViewGroup进行根的呈现,然后再调用下面的View子控件进行呈现,直到整个UI全部呈现为止。
View与ViewGroup是我们以后开发Android的重点,各位要好好体会本专题的概念及技术点吧。