`
- 浏览:
205962 次
- 性别:
- 来自:
上海
-
Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的。AndroidUI界面的一般结构可参见下面的示意图:
可见,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup,而子ViewGroup又可以包含下一层的叶子节点的View和ViewGroup。事实上,这种灵活的View层次结构可以形成非常复杂的UI布局,开发者可据此设计、开发非常精致的UI界面。
一般来说,开发Android应用程序的UI界面都不会直接实用View和ViewGroup,而是使用这两大基类的派生类。
View派生出的直接子类有:AnalogClock,ImageView,KeyboardView, ProgressBar,SurfaceView,TextView,ViewGroup,ViewStub
View派生出的间接子类有:AbsListView,AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>,AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, AutoCompleteTextView,Button,CalendarView, CheckBox, CheckedTextView, Chronometer, CompoundButton,
ViewGroup派生出的直接子类有:AbsoluteLayout,AdapterView<T extends Adapter>,FragmentBreadCrumbs,FrameLayout,LinearLayout,RelativeLayout,SlidingDrawer
ViewGroup派生出的间接子类有:AbsListView,AbsSpinner, AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, CalendarView, DatePicker, DialerFilter, ExpandableListView, Gallery, GestureOverlayView,GridView,HorizontalScrollView, ImageSwitcher,ListView,
上面View、ViewGroup的直接子类和间接别子类中标记为红色的类是我们在应用开发中接触和用得比较频繁的类,需要大家重点熟悉和掌握,其详细的API及用法可参见SDK的说明。这里特别指出,ImageView是布局具有图片效果的UI常用的类,SurfaceView是常用来进行游戏开发的空间,与一般View相比较它是特殊的并且非常重要的类(后续会对原理作深入分析),而AbsoluteLayout、FrameLayout,LinearLayout, RelativeLayout这几个ViewGroup的直接子类是Android UI布局中最基本的布局元素。
值得一提的是,上述的所有基类、派生类都是Android framework层集成的标准系统类,开发者在应用开发中可直接引用SDK中这些系统类及其API。但事实上,在UI开发的很多场景下,直接使用这些系统类并不能满足应用开发的需要。比如说,我们想用ImageView在默认情况下加载一幅图片,但是希望在点击该View时View变换出各种图像处理效果,这个时候直接使用ImageView是不行的,此时我们可以重载ImageView,在新派生出的子控件中重载OnDraw等方法来实现我们的定制效果。这种派生出系统类的子类方法我们通常称之为自定义控件。自定义控件可像标准View控件那样在XML及我们的Java文件中进行布局和实例化,但在布局时必须指出其完整的包名和类名。事实上,自定义控件的使用是我们进行Android 开发的必不可少的基本用法,是必须掌握的基本技巧。
View和ViewGroup最重要的几个方法——
protected void onDraw(Canvas canvas):View类中用于重绘的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。
protected void onLayout(boolean changed, int left, int top, int right, int bottom):View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。
protected void dispatchDraw(Canvas canvas):ViewGroup类及其派生类具有的方法,这个方法主要用于控制子View的绘制分发,重载该方法可改变子View的绘制,进而实现一些复杂的视效,典型的例子可参见Launcher模块Workspace的dispatchDraw重载。
protected boolean drawChild(Canvas canvas, View child, long drawingTime)):ViewGroup类及其派生类具有的方法,这个方法直接控制绘制某局具体的子view,重载该方法可控制具体某个具体子View。
View、ViewGroup是Android UI体系至关重要的两大基类,本文仅对一些最基本的概念、原理和API进行了介绍,大家要全面掌握还需要阅读SDK中对这两个类的介绍并熟悉其API ,并在应用开发中逐渐的加深理解和掌握其用法。
- 大小: 25.1 KB
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
这份“Android系统概述——底层开发的资料”可能涵盖了上述各个方面的知识,包括源码分析、驱动开发、系统优化等内容,旨在帮助开发者深入理解Android系统并进行有效的底层开发。通过学习和实践,你可以掌握Android...
### Android系统Framework概述 #### 一、Android简介 Android是一个基于Linux内核的开源移动操作系统,主要用于智能手机和平板电脑等移动设备。它是由Google公司及其合作伙伴组成的开放手机联盟(Open Handset ...
android-magic-surface-view 这是一个 android 动画特效库, 可以实现各种炫酷动画。 1. 安装 gradle: dependencies { compile 'com.gplibs:magic-surface-view:1.1.1' } 2. 一些示例效果 此文档只做一些简单说明...
Android系统架构涉及的几个核心知识点包括:Android系统整体架构、Android专用驱动、Android硬件抽象层、Android应用程序组件、Android应用程序框架、Android用户界面架构以及Dalvik虚拟机。 首先,Android系统整体...
1.1、View 概述 视图 (View) 是一个容器,专门负责布局。表现为显示在屏幕上的各种视图,如 TextView、LinearLayout 等。 1.2、View 分类 View 主要分为两类,具体如下表格所示: 类别 示例 特点 单一...
一、自定义View概述 自定义View是Android开发中的一个核心部分,它使开发者能够突破系统预定义View的限制,实现独特的用户界面和交互。自定义View通常涉及继承已有的View类(如View、Button、TextView等)或 ...
一、Android Animation概述 Android中的动画分为两种类型:属性动画(Property Animation)和视图动画(View Animation)。属性动画系统是自Android 3.0(API级别11)引入的,它可以改变对象的任意属性,并且这些...
### Android系统概述 #### Android系统架构 Android系统架构可以分为四个层次:应用程序层、应用程序框架层、核心类库以及Linux内核。 1. **应用程序层**:这一层包含了一系列预安装的应用程序,如电子邮件客户端...
本文主要讲解了Android自定义view实现车载可调整轨迹线的知识点,包括自定义view的概述、实现、轨迹线的绘制和调整等内容。通过本文,读者可以了解Android自定义view的实现方法和轨迹线的绘制和调整技术。
### Android 用户交互View组件学习 #### 一、概述 在Android开发中,用户交互是至关重要的环节之一。用户界面(User Interface,简称UI)的设计直接影响到用户体验的好坏,因此掌握好Android中的各种用户交互组件...
在Android开发中,View库是构建用户界面的关键组成部分。QuickView是Android SDK中一个高效的视图库,旨在简化UI开发,提高性能,并提供更丰富的视图功能。在本篇文章中,我们将深入探讨QuickView库的核心概念、优势...
概述 该项目结合 MVP 与 Clean 架构思想,探索在 Android 项目上的最佳实践。 遵循 Clean Architecture 的原则。 数据层(Data Layer):加入数据转换层(Mapper)将服务端数据模型(Entity)与本地数据模型...
一、自定义View概述 自定义View是Android开发中的一个关键部分,它使开发者能够突破系统预定义的View限制,构建出具有个性化特性的UI元素。这通常涉及创建一个新的View类,继承自Android的基础View或 ViewGroup 类...
【Android核心模块内容概述】 Android是一个广泛应用于移动设备的操作系统,其核心模块是构建整个平台的基础,对于初学者来说,理解这些模块的功能和交互至关重要。本文将深入探讨Android的四个核心层次:操作系统...
### Android自定义View详解 #### 一、引言 在Android开发中,为了实现更加复杂的UI界面和交互逻辑,开发者往往需要对系统提供的基础控件进行扩展或自定义。自定义View是Android开发中的一项重要技能,它允许开发者...
### 一、Android屏幕截图概述 在Android应用开发中,有时候我们需要获取当前屏幕的图像,例如,在游戏或某些特殊功能中保存当前界面作为截图。Android系统提供了多种方式来实现这一功能,下面我们将逐一介绍这些...
一、View 布局概述 View 的布局方式是指一组 View 元素如何布局。ViewGroup 类是布局和视图容器的基类,此类定义了 ViewGroup.LayoutParams 类,它作为布局参数的基类。所有的布局方式都可以归类为 ViewGroup 的 5 ...
概述:本文通过对Kotlin协程的性能分析,比较了在Android中使用Model-View-Intent(MVI)架构模式下Kotlin协程和RxJava concurrency framework的性能优势。同时, Paper也对两种MVI架构库MvRx(Airbnb)和Vector...
#### 一、`transcriptMode`属性概述 `transcriptMode`是Android ListView中的一个特殊属性,它主要用于处理那些需要持续添加新数据项的情况。例如,在聊天应用中,新的消息会被不断地追加到列表的末尾。为了确保...