Android视图框架
Android视图框架
Android的UI系统是android应用系统框架最核心,最基础的内容!
1. Android视图系统、层次关系
Android应用设计和Web应用设计类似,也分前端和后端设计。Android的核心要素和四大组件属于后端设计部分,UI设计属于前端设计。前端设计决定了用户体验的好坏,后端设计则决定了功能的完备和应用的安全、稳定。
对Android的UI设计来说,用到的最重要的两个类是:View和ViewGroup。它们决定着展示给用户的外观界面的形状。下面介绍下Android视图系统的层次关系:
图 1. 界面 (UI)

View 类是所有视图控件 (包括 ViewGroup) 的基类。 各种 UI 控件都继承 View类,通过实现不同的接口实现特定功能。关于继承关系,多说一下,方便大家更清楚的理解控件,见下图:
图 2. 控件继承关系

图 3 . 常用的UI 控件

2. Android 视图框架 MVC 模型
Android 的 UI 框架也是采用的 MVC 进行组织的,它提供控制器处理用户输入,对模型做出相应操作,并将结果反馈到视图,重新构建视图、渲染到屏幕。
图4. Android UI的MVC模型

3. Android 视图执行过程分析
在 Android 的开发中,视图布局,采用 XML 文件编写,通过在 XML 文件中添加相应的控件,设置其属性达到布局的目的。一个简单的布局文件如下:
demo.xml 文件内容
<?xml version="1.0" encoding="utf-8"?> //声明xml文件编码及版本
<LinearLayout //使用线性布局,对内部控件内部起作用,十七线性排列 //引用的命名空间
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp"
android:orientation="vertical" > //内部控件排列方向:垂直排列 <EditText //添加一个文本输入框控件
android:id="@+id/show" //设置该控件ID //一下到结束为该控件的各种属性设置,使其在界面上显示出特定样式
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_weight="2"
android:lines="3"
android:editable="false"
android:gravity="top|right"
android:cursorVisible="true"
android:text=""
android:textSize="24sp"
/> //结束该控件
</LinearLayout> //布局结束标示
一个布局文件(demo.xml)创建好后,新建一个 Test.java 文件来使用该布局文件,如下:
Test.java文件内容
package com.AcerWang.Test; import android.app.Activity;
import android.os.Bundle;
import android.view.View; //新建的Test必须继承Activity,才能创建出活动
public class Test extends Activity{ //重载onCreate方法,产生新的活动,视图的呈现在活动中,活动执行用
户交互的行为,关于活动(Activity)的作用,在 前一篇文章 中有介绍。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//将之前写的布局文件输出到屏幕
setContentView(R.layout.demo);
}
}
4. 总结
以上是对 Android 视图框架结构、原理及执行流程的简单介绍,希望对新手有所帮助。介绍的原理比较多,比较枯燥,但很重要,希望能坚持多看看,对以后的开发有好处。当然还有很多深层次的内容没有涉及到,在以后的学习中再和大家分享,写作过程中的不当之处还请大家指出,大家相互学习,共同进步!
Android视图框架的更多相关文章
- android 开源框架推荐
同事整理的 android 开源框架,个个都堪称经典.32 个赞! 1.volley 项目地址 https://github.com/smanikandan14/Volley-demo (1) JS ...
- Android 应用框架 —— 组件
本文内容根据个人自学整理记录,理解不当之处,希望大家批评指正,大家相互学习,写学习归纳,写博客是个好习惯,希望能够坚持下去. 在前一篇文章当中介绍了Android 的系统框架,主要是为了让大家对And ...
- Android View框架总结(四)View布局流程之Measure
View树的measure流程 View的measures时序图 View布局流程之measure measure过程 View的measure过程 ViewGroup的measure过程 Frame ...
- Android自动化框架介绍
随着Android应用得越来越广,越来越多的公司推出了自己移动应用测试平台.例如,百度的MTC.东软易测云.Testin云测试平台…….由于自己所在项目组就是做终端测试工具的,故抽空了解了下几种常见的 ...
- 开发自己的山寨Android注解框架
目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...
- 六款值得推荐的Android开源框架简介
技术不再多,知道一些常用的.不错的就够了.下面就是最近整理的“性价比”比较高的Android开源框架,应该是相对实用的. 1.volley 项目地址 https://github.com/smanik ...
- [转]Android开源框架ImageLoader的完美例子
Android开源框架ImageLoader的完美例子 2013年8月19日开源框架之Universal_Image_Loader学习 很多人都在讨论如何让图片能在异步加载更加流畅,可以显示大量图片, ...
- Android自动化框架 模拟操作 模拟测试
转自:http://bbs2.c114.net/home.php?mod=space&uid=1025779&do=blog&id=5322 几种常见的Android自动化测试 ...
- 2017年Android百大框架排行榜
框架:提供一定能力的小段程序 >随意转载,标注作者"金诚"即可 >本文已授权微信公众号:鸿洋(hongyangAndroid)原创首发. >本文已经开源到Gith ...
随机推荐
- [置顶] Hash查找,散列查找
//Hash.h #ifndef HASH_H #define HASH_H #define HASH_ARR_SIZE 100 #define FILL -1 #include <stdlib ...
- SKEffectNode类
继承自 SKNode:UIResponder:NSObject 符合 NSCoding(SKNode)NSCopying(SKNode)NSObject(NSObject) 框架 /System/L ...
- Android Dialog AlertDialog
1.普通的对话框 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" andro ...
- ApiDemos-->Views-lists-slow adapter学习
今天来依照apidemos提供的方法来实现slow loading的效果. 简单说下实现方法: 实现ListView.OnScrollListener ,监听到手势滑动的情况,当处于滚动状态时,将新显 ...
- XgCalendar日历插件动态添加参数
在使用xgcalendar日历插件的时候,参数数组并非只有类型.显示时间.时区等这些参数,还可以根据extParam自定义参数扩展搜索条件,例如根据用户Id搜索不同用户的日历信息,需要将用户的Id存在 ...
- Freemarker常用技巧(三)
freemarker模板解析过程 例如:一个freemarker表达式<body> ${hello} </body>,会被解析成三个部分,分别是<body>${he ...
- codevs 2451 互不侵犯(状丫dp)
/* 好神奇好神奇...表示自己要学的还很多 注意到n<=9 不是搜索就是状丫 搜索+剪枝 70分 枚举放或者不放 这里用状丫 f[i][j][k] 表示前i行 放了j个国王 i行的状态是k的方 ...
- Highcharts 设置折线图的显示与隐藏
1.初始化隐藏某条曲线 series 配置如: [ {name:"发帖", postCountData}, {name:"删帖帖", deleteCountDa ...
- js接收复选框的值
<td><input type="checkbox" class="title" name="title" value=& ...
- Spring 3.0就这么简单读书笔记
一般情况下,spring容器中的大部分Bean都是单实例的,所以一般无须通过@Repository.@Service.@Component等注解的value属性为Bean指定名称,也无须使用@Qual ...