`
xieshuai19887893
  • 浏览: 11152 次
文章分类
社区版块
存档分类
最新评论

Android界面View及ViewGroup

 
阅读更多

原作者:http://www.verydemo.com/demo_c131_i145269.html

转载:http://www.2cto.com/kf/201109/104633.html

 

 

View及ViewGroup类关系
Android View和ViewGroup从组成架构上看,似乎ViewGroup在View之上,View需要继承ViewGroup,但实际上不是这样的。View是基类,ViewGroup是它的子类。这就证明了一点,View代表了用户界面组件的一块可绘制的空间块。每一个View在屏幕上占据一个长方形区域。在这个区域内,这个VIEW对象负责图形绘制和事件处理。View是小控件widgets和ViewGroup的父类。ViewGroup又是Layout的基类。

 

 


从上面两图的对比中,可以看出,实际上ViewGroup是View的子类,因此,View的行为特征ViewGroup也具备,但同时因为ViewGroup是Layout的祖先,所以具备了其它一些特点,View所未具有的。通常创建一个View,不论是通过XML还是通过代码创建。对任何一个View及这个View的子类Widget,需要关注如下几个方面:
【1】设置属性,如长、宽、着色等。这些属性的设置通常可以用代码实现,也可以用XML文件。并用这些属性在运行时候也可以通常方法进行修改。
ID 属性,Android对每个UI元素的ID名称要求唯一,但也不绝对。同时在不同的Layout中是可以相同的元素名称的。给一个UI元素指定ID,有一个好处就是可以在代码中找得到。

 

Tags,同ID不同,这个不用来搜索View,类似于对View的一些描述性数据保存。
Animation,对任何一个View,可以使用动画对象进行操作。注意,如果View有子的话,子同样具备这个animation功能
Position, Size, padding and margins,对任一个View来说,表达这个View通常是宽和高。也可以设置padding和margins。不是所有的View都设置margins。

 

Orientatiion,对ViewGroup的子类Layout来说,设置Orienatation,可用来决定子类的位置
FillModel,出现这种情况主要是默认情况,某些元素不能完全占满父区域的空间,这时除非子VIEW已经设置具体和DPI,否则话需要告诉父控件,你所选择填充空间方式,如Fill-parent或者Wrap-content等。
Gravity,Gravity与Orientation是不同,Gravaity与Word文档中左对齐,右对齐类似。缺省是左上对齐。
Weight,这个在两个控制同时分配剩余空间,需要设置layout-weight决定两者谁的占比。
【2】请求焦点,可以通过函数实现焦点转换。不同的焦点可以实现不同的背景变换等功能。焦点在Android里分为几种情况,一种是可以获取焦点,另外一种是不能获取焦点,第三种是可获取焦点,但当前正取触摸状态下。
【3】设置事件监听者,所有的View都会在本身发生变化将自身的信息广播出去。比喻点击、焦点失去得到等。通常一个事件来到,Android会将事件传递到相应的View,然后View将事件传递到相应的Listeners。这时View需要获取焦点,如果需要重新绘制View的话,需要调用invalidate(0或者reqeustLayout重新绘制整个界面。
【4】设置显示与隐藏,还可以对其内容设置scrolling。
2.1.1 View、Window、Activity、Dispay之间的关系
这些都是组成Android 系统显示的关键元素。我们首先来了解Dispay。Dispay代表了硬件显示屏幕信息。

 

....................................................................

 

从上图,我们可以理出大致的显示过程如下:
【1】ActivityManagerService创建Activity线程,激活一个activity
【2】系统调用Instrumentation.newActivity创建一个activity
【3】Activity创建后,attach到一个新创建的phonewindow中。这样Activity获取一个唯一的WindowManager服务的实例
【4】Activity创建过程中使用setcontentView设置用用户UI,这些VIEW被加入到PhoneWindow的ContentParent中。
【5】Activity线程继续执行,当执行到Activity.makeVisible是将根view DecoView加入到WindowManger中,WindowManger实全会为每个DecoView创建对应的ViewRoot
【6】每个ViewRoot拥有一个Surface,每个Surface将会调用底层库创建图形绘制的内存空间。这个底层库就是SurfaceFlinger。SurfaceFlinger同时也负责将个View绘制的图形合到一块(按照Z轴)显示到用户屏幕。
【7】如果用户直接在Canvas上绘制,实际上它直接操作Surface。但对每个View的变更,它是要通知到ViewRoot,然后ViewRoot获取Canvas。如果绘制完成,surfaceFlinger得到通知,合并Surface成一个Surface到设备屏幕。
从上面的图形输出过程分析,我们可以知道真正显示图形的实际上跟Activity没有关系,完全由WindowManager来决定。WindowManager是一个系统服务,因此可以直接调用这个服务来创建界面,并且更绝的是Dialog、Menu也是有WindowManager来管理的。另外一个我们也可以看到,最底层都是Surface来,因此,常见开发游戏的人都推荐你使用SurfaceView来创建界面。

分享到:
评论

相关推荐

    Android双向界面滑动ViewGroup源码包

    Android实现的ViewGroup双向滑动界面效果,这在当下的各种android客户端应用中使用广泛,操作也是比较顺手的一种方式,本滑动界面中设置右滑的菜单View、设置主界面View、并设置了菜单和内容边界,定义好这些为下...

    Android视图控件架构分析之View、ViewGroup

    在Android中,视图控件大致被分为两类,即ViewGroup和View,ViewGroup控件作为父控件,包含并管理着子View,通过ViewGroup和View便形成了控件树,各个ViewGoup对象和View对象就是控件树中的节点。在控件树中,以树的...

    重写ViewGroup实现双向滑动界面

    详细请看:http://blog.csdn.net/dawanganban/article/details/24007215

    实验2-Android-应用的界面开发(1).doc

    import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.TextView; public class ...

    Android 悬浮窗功能实现(微信语音通话悬浮窗效果实现)

    Android 界面绘制都是通过 WindowManager 服务来实现的,WindowManager 对象可通过获取 WINDOW_SERVICE 系统服务得到,并因为 WindowManager 继承于 ViewManager ,所以其拥有以下方法 addView(View view, ...

    基于Android技术的界面设计与研究

    详细介绍了google 发布的新一代智能手机平台Android 的基本架构, 通过对其应用程序构成框架的分析,...最后通过对视图和布局的介绍,给出一种使用Android 技术的界面设计实现方案,并通过数据绑定实现了用户事件映射。

    Android开发中获取View视图宽与高的常用方法小结

    本文实例讲述了Android开发中获取View视图宽与高的常用方法。分享给大家供大家参考,具体如下: 一、根据WindowManager管理器获得 1)这两种方法在屏幕未显示的时候,还是处于0的状态,即要在setContentView调用之后...

    详解如何实现一个基本的Android用户界面

    Android用户界面 Android应用程序的基础功能单元就是Activity–android.app.Activity类中的一个...想要让你的Activity显示在屏幕上并且设计它的UI,你需要使用view和viewgroup–Android平台基础的用户界面表达单元。

    Android studio界面设计与资源PPT

    (1)理解Android屏幕元素的层次结构、View与ViewGroup (2)熟悉Android的布局对象和Android中创建UI界面的方式 (3)熟悉Android常用的UI控件及其基本属性 (4)熟悉Android尺寸的单位 (5)掌握TextView、...

    《Android群英传》完整扫描版

    2.2.2 Android Studio常用界面 21 2.2.3 导入Android Studio工程 23 2.3 ADB命令使用技巧 24 2.3.1 ADB基础 24 2.3.2 ADB常用命令 25 2.3.3 ADB命令来源 29 2.4 模拟器使用与配置 29 第3章 Android控件架构与自定义...

    android Listview模拟聊天界面

    本文实例为大家分享了android Listview模拟聊天界面的具体代码,供大家参考,具体内容如下...import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.EditText; import android.wid

    安卓注册界面(大学安卓课程作业实例)

    实验目的:掌握Android常用View视图的基本属性和触发事件,掌握常用ViewGroup视图的使用和组合,了解各种专用View视图的基本属性和使用。 实验仪器:装有Eclipse+adt或者Android Studio的PC机。 实验内容: 1. ...

    Android 触摸事件监听(Activity层,ViewGroup层,View层)详细介绍

    Android不同层次的触摸事件监听  APP开发中,经常会遇到有关手势处理的操作,比如向右滑动返回上一个页面。关于触摸事件的处理,我们可以大概处理在不同的层次上。 Activity层:可以看做触摸事件获取的最顶层 ...

    Android移动应用开发实验指导书.docx

    配置:winxp或win7系统,内存大于4G,硬盘250G及以上 JDK1.7 、Eclipse、ADT、Android SDK 实验主要技术基础 (1)Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而...

    android顶部滑动导航

    import android.view.ViewGroup.LayoutParams; import android.view.animation.LinearInterpolator; import android.view.animation.TranslateAnimation; import android.widget.HorizontalScrollView; import ...

    Android UI组件实例集合

    ViewFlow 相当于 Android UI 部件提供水平滚动的 ViewGroup,使用 Adapter 进行条目绑定。 8、Android 导航菜单 RibbonMenu 是 Android 上的一个导航菜单组件。就三个目标文件,菜单项直接在 XML 中定义,可添加...

    Android自定义ViewGroup实现流式布局

    本文实例为大家分享了Android自定义ViewGroup实现流式布局的具体代码,供大家参考,具体内容如下 1.概述 本篇给大家带来一个实例,FlowLayout,什么是FlowLayout,我们常在App 的搜索界面看到热门搜索词,就是...

    Android入门到精通源代码.

    第4章 Android人机界面和常用组件 4.1 用户人机界面元素分类 4.1.1 视图组件(View) 4.1.2 视图容器组件(ViewGroup) 4.1.3 布局组件(Layout) 4.1.4 布局参数(LayoutParams) 4.2 常用Widget组件 4.2.1 文本框...

    android开发入门与实战(下)

    第4章 赚钱的市场——AndroidMarket及应用发布 4.1 GoogleMarket产生背景与目的 4.2 体验“选货”的乐趣——在G1上体验Market的使用 4.3 Android开发活动及特色应用 4.3.1 开发应用的领域 4.3.2 AndroidMarket特色...

    Android自定义ViewGroup实现淘宝商品详情页

    最近公司在新版本上有一个需要,要在首页添加一个滑动效果,具体就是仿照X... 通过指定父view和子view的focus来切换滑动的处理界面—即通过view的requestDisallowInterceptTouchEvent方法来决定是哪一个ScrollView来处

Global site tag (gtag.js) - Google Analytics