一、用户界面基础
用户界面(UserInterface)是系统和用户间进行信息交换的媒介。
Android实行界面设计者和程序开发者独立并行工作的方式,实现了界面设计和程序逻辑完全分离,不仅有利于后期界面修改中可以避免修改程序的逻辑代码,也有利于针对不同型号手机的屏幕分辨率调整界面尺寸时不影响程序的运行。
为了使界面设计和程序逻辑分离,Android程序将用户界面和资源从逻辑代码中分离出来,使用XML文件描述用户界面,资源文件独立保存在资源文件夹中。
Android用户界面框架(Android UI Framework)采用MVC(Model-View-Controller)模型,为用户界面提供处理用户输入的控制器(controller)、显示图像的视图(view)和模型(model)。模型是应用程序的核心,保存有数据和代码。
Android系统的界面元素以一种树型结构组织在一起,称为视图树。
绘制依据视图树从上至下绘制每个界面元素,且每个元素负责完成自身的绘制如果元素包含子元素,则该元素通知其下所有子元素进行绘制
视图树由View和ViewGroup构成。View是一个重要的基类,所有界面上的可见元素都是View的子类,ViewGroup是能够承载多个View的显示单元,用于承载界面布局和具有原子特性的重构模块。
MVC中的控制器能够接受并响应用户的动作,如按键和触摸屏幕等,并将这些动作作为一系列独立事件加入到队列中,按照“先进先出”的规则将每个事件分配给对应的事件处理函数进行处理。
Android用户界面是单线程用户界面,事件的获取和界面的屏幕绘制使用同一个线程。
好处:用户不需要在控制器和视图间进行同步,事件的处理完全按照队列顺序进行;
坏处:如果事件函数过于复杂,可能导致用户界面失去响应,因此界面的事件响应函数尽可能使用简短代码,或者将复杂工作交给后台线程处理。
二、界面布局
布局是Android应用程序的界面定义,布局中所有界面元素都是以视图(View)或视图组(ViewGroup)对象。一个布局首先是一个视图组对象,可在视图组对象中添加子视图组对象或视图对象。
Button、CheckBox、ImageView、TextView及其他UI组件都是View类的子类或子类的派生类。
在设计Android应用程序U时,可通过XML定义和代码定义两种方法来定义布局。
Android系统定义了6种基本摆放控件的规则,它们都间接或者直接继承ViewGroup类。
2、布局(Layout)
2.1、框架布局(FrameLayout)
框架布局也叫顿布局,是最简单的布局方式,所有添加到这个布局中的视图都是以层叠方式显示,第一个添加的视图显示在最底层,最后一个放在最顶层,上一层的视图会覆盖下一层视图,因此框架布局类似堆栈布局。先下后上
【案例1:演示框架布局编程方法】
(1)新建OrderFood工程,选择Project→app→main→res-layout目录,选择New→XML→layout XML File,在Layout File Name中输入layout_framelayout,在Root Tag中输入FrameLayout,创建一个框架布局文件。
(2)在框架布局中放置两个Button和一个ImageView控件
<Button
android:id="@+id/btn1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="button1"/>
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="确定"/>
<TextView
android:id="@+id/ImageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher_background"/>
说明:
android:layout_width,设置控件的宽
android:layout height,设置控件的高
match_content,表示和父组件一样尺寸
wrap_content,表示和自身内容一样尺寸
android:text,指定的控件当中显示的文字
android:src,图片资源
(3)在MainActivity.java文件中修改与主Activity绑定的布局文件主要修改语句:setContentView(R.layout.layout framelayout);
运行结果: