android view([Android] View 的继承关系)

2024-09-27 20:15:28 0

android view([Android] View 的继承关系)

各位老铁们好,相信很多人对android view都不是特别的了解,因此呢,今天就来为大家分享下关于android view以及[Android] View 的继承关系的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!

本文目录

[Android] View 的继承关系

在 Android 所有的控件和 Layout 都有着一个父类 View 。Anroid 通过继承的方式,对父类控件进行继承,由此来在父类基础上创造新的控件。 我们先看看 View 这个父类 可以看到间接继承的有100多个子类,不得不说 View 这个爹很成功(Object 斜眼)。 我们先拿其中的 ViewGroup 来说吧 可以看到大部分的 Layout 都继承自 ViewGroup 。一个 ViewGroup 可以包含别的 View 或 ViewGroup 。所以一个视图的根布局,通常是一个 ViewGroup 。 对于其中的 LinearLayout , RelativeLayout , GridLayout 等 Layout 大家应该都比较熟悉了。 但是看看里面还有一些控件,这些控件同样有着包含别的 View 或 ViewGroup 的功能。比如 RecyclerView , AdapterView 。 可能你会问,这个 AdapterView 是什么玩意。其实这个是我们常用的 GridView, ListView 的父类,换句话说,GridView, ListView 也属于 ViewGroup ,他们都能包含其他的 View 或 ViewGroup。相信你在使用 ListView 的时候一定在里面添加了一些控件的吧。 不得不说 TextView 也是一个强大的父类,很多的控件都继承自它。 其中常见的有 Button,EditText,CheckBox,RadioButton 等,我们发现啊。。貌似只要带有文字的控件基本都来继承自 TextView。这是他作为父类的特点。 ImageView 带有显示图片的特性,然而很少有控件需要这个特性,所以相对来说子类就比较少了。 其中比较用的多的就是 ImageButton 了,现在 Android 还提供了原生的 FloatingActionButton 也是极好的。 以上提出来说的三个子类是在整个 View 体系中比较重要的,其中以 ViewGroup 最为繁杂,派生类最多,而且其中有控件,有布局。TextView 则以子类控件继承为主。ImageView 的话相对需求较少。 我们给出一个简略图,可以直观的看到整个体系中常用类的继承结构。 ps1:上图包括直接子类和派生之类 ps2:如果想查看完整的继承结构,请查看 官方文档

Android view和viewgroup的区别,越详细越好!!

简单的讲,view类是android中众多UI组件的父类;viewgroup也继承自view类,它是UI组件的容器;举例讲,view类的子类有TextView,EditView这种文本框;viewGroup类的子类有Linearlayout,Slidingmenu等布局。

Android - View 绘制流程

我们知道,在 Android 中,View 绘制主要包含 3 大流程:

Android 中,主要有两种视图: View 和 ViewGroup ,其中:

虽然 ViewGroup 继承于 View ,但是在 View 绘制三大流程中,某些流程需要区分 View 和 ViewGroup ,它们之间的操作并不完全相同,比如:

对 View 进行测量,主要包含两个步骤:

对于第一个步骤,即求取 View 的 MeasureSpec ,首先我们来看下 MeasureSpec 的源码定义:

MeasureSpec 是 View 的一个公有静态内部类,它是一个 32 位的 int 值,高 2 位表示 SpecMode(测量模式),低 30 位表示 SpecSize(测量尺寸/测量大小)。 MeasureSpec 将两个数据打包到一个 int 值上,可以减少对象内存分配,并且其提供了相应的工具方法可以很方便地让我们从一个 int 值中抽取出 View 的 SpecMode 和 SpecSize。

一个 MeasureSpec 表达的是:该 View 在该种测量模式(SpecMode)下对应的测量尺寸(SpecSize)。其中,SpecMode 有三种类型:

对 View 进行测量,最关键的一步就是计算得到 View 的 MeasureSpec ,子View 在创建时,可以指定不同的 LayoutParams (布局参数), LayoutParams 的源码主要内容如下所示:

其中:

LayoutParams 会受到父容器的 MeasureSpec 的影响,测量过程会依据两者之间的相互约束最终生成子View 的 MeasureSpec ,完成 View 的测量规格。

简而言之,View 的 MeasureSpec 受自身的 LayoutParams 和父容器的 MeasureSpec 共同决定( DecorView 的 MeasureSpec 是由自身的 LayoutParams 和屏幕尺寸共同决定,参考后文)。也因此,如果要求取子View 的 MeasureSpec ,那么首先就需要知道父容器的 MeasureSpec ,层层逆推而上,即最终就是需要知道顶层View(即 DecorView )的 MeasureSpec ,这样才能一层层传递下来,这整个过程需要结合 Activity 的启动过程进行分析。

我们知道,在 Android 中, Activity 是作为视图组件存在,主要就是在手机上显示视图界面,可以供用户操作, Activity 就是 Andorid 中与用户直接交互最多的系统组件。

Activity 的基本视图层次结构如下所示:

Activity 中,实际承载视图的组件是 Window (更具体来说为 PhoneWindow ),顶层View 是 DecorView ,它是一个 FrameLayout , DecorView 内部是一个 LinearLayout ,该 LinearLayout 由两部分组成(不同 Android 版本或主题稍有差异): TitleView 和 ContentView ,其中, TitleView 就是标题栏,也就是我们常说的 TitleBar 或 ActionBar , ContentView 就是内容栏,它也是一个 FrameLayout ,主要用于承载我们的自定义根布局,即当我们调用 setContentView(...) 时,其实就是把我们自定义的布局设置到该 ContentView 中。

当 Activity 启动完成后,最终就会渲染出上述层次结构的视图。

因此,如果我们要求取得到子View 的 MeasureSpec ,那么第一步就是求取得到顶层View(即 DecorView )的 MeasureSpec 。大致过程如下所示:

经过上述步骤求取得到 View 的 MeasureSpec 后,接下来就可以真正对 View 进行测量,求取 View 的最终测量宽/高:

Android 内部对视图进行测量的过程是由 View#measure(int, int) 方法负责的,但是对于 View 和 ViewGroup ,其具体测量过程有所差异。

因此,对于测量过程,我们分别对 View 和 ViewGroup 进行分析:

综上,无论是对 View 的测量还是 ViewGroup 的测量,都是由 View#measure(int widthMeasureSpec, int heightMeasureSpec) 方法负责,然后真正执行 View 测量的是 View 的 onMeasure(int widthMeasureSpec, int heightMeasureSpec) 方法。

具体来说, View 直接在 onMeasure(...) 中测量并设置自己的最终测量宽/高。在默认测量情况下, View 的测量宽/高由其父容器的 MeasureSpec 和自身的 LayoutParams 共同决定,当 View 自身的测量模式为 LayoutParams.UNSPECIFIED 时,其测量宽/高为 android:minWidth / android:minHeight 和其背景宽/高之间的较大值,其余情况皆为自身 MeasureSpec 指定的测量尺寸。

而对于 ViewGroup 来说,由于布局特性的丰富性,只能自己手动覆写 onMeasure(...) 方法,实现自定义测量过程,但是总的思想都是先测量 子View 大小,最终才能确定自己的测量大小。

当确定了 View 的测量大小后,接下来就可以来确定 View 的布局位置了,也即将 View 放置到屏幕具体哪个位置。

View 的布局过程由 View#layout(...) 负责,其源码如下:

View#layout(...) 主要就做了两件事:

ViewGroup 的布局流程由 ViewGroup#layout(...) 负责,其源码如下:

可以看到, ViewGroup#layout(...) 最终也是通过 View#layout(...) 完成自身的布局过程,一个注意的点是, ViewGroup#layout(...) 是一个 final 方法,因此子类无法覆写该方法,主要是 ViewGroup#layout(...) 方法内部对子视图动画效果进行了相关设置。

由于 ViewGroup#layout(...) 内部最终调用的还是 View#layout(...) ,因此, ViewGroup#onLayout(...) 就会得到回调,用于处理 子View 的布局放置,其源码如下:

由于不同的 ViewGroup ,其布局特性不同,因此 ViewGroup#onLayout(...) 是一个抽象方法,交由 ViewGroup 子类依据自己的布局特性,摆放其 子View 的位置。

当 View 的测量大小,布局位置都确定后,就可以最终将该 View 绘制到屏幕上了。

View 的绘制过程由 View#draw(...) 方法负责,其源码如下:

其实注释已经写的很清楚了, View#draw(...) 主要做了以下 6 件事:

我们知道,在 Activity 启动过程中,会调用到 ActivityThread.handleResumeActivity(...) ,该方法就是 View 视图绘制的起始之处:

可以看到, ActivityThread.handleResumeActivity(...) 主要就是获取到当前 Activity 绑定的 ViewManager ,最后调用 ViewManager.addView(...) 方法将 DecorView 设置到 PhoneWindow 上,也即设置到当前 Activity 上。 ViewManager 是一个接口, WindowManager 继承 ViewManager ,而 WindowManagerImpl 实现了接口 WindowManager ,此处的 ViewManager.addView(...) 实际上调用的是 WindowManagerImpl.addView(...) ,源码如下所示:

WindowManagerImpl.addView(...) 内部转发到 WindowManagerGlobal.addView(...) :

在 WindowManagerGlobal.addView(...) 内部,会创建一个 ViewRootImpl 实例,然后调用 ViewRootImpl.setView(...) 将 ViewRootImpl 与 DecorView 关联到一起:

ViewRootImpl.setView(...) 内部首先关联了传递过来的 DecorView (通过属性 mView 指向 DecorView 即可建立关联),然后最终调用 requestLayout() ,而 requestLayout() 内部又会调用方法 scheduleTraversals() :

ViewRootImpl.scheduleTraversals() 内部主要做了两件事:

Choreographer.postCallback(...) 会申请一次 VSYNC 中断信号,当 VSYNC 信号到达时,便会回调 Choreographer.doFrame(...) 方法,内部会触发已经添加的回调任务, Choreographer 的回调任务有以下四种类型:

因此, ViewRootImpl.scheduleTraversals(...) 内部通过 mChoreographer.postCallback(Choreographer.CALLBACK_TRAVERSAL, mTraversalRunnable, null) 发送的异步视图渲染消息就会得到回调,即回调 mTra

android中的View是做什么的

View类是Android的一个超类,这个类几乎包含了所有的屏幕类型。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要。在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等。

游戏中最重要的就是需要与玩家交互,比如键盘输入、触笔点击事件,Android中提供了 onKeyUp、onKeyDown、onKeyMultiple、onTouchEvent、onTrackballEvent等方法,可以轻松地处理游戏中的事件信息。

invalidate不能直接在线程中调用,就是不可以在子线程中调用明白乎?因为它违背了Android的单线程模型:Android UI操作并不是线程安全的,并且这些操作必须在UI 线程中执行,因此Android中最常用的方法就是利用Handler来实现UI线程的更新。 其实用AsyncTask也可以。

oppo手机中的androidView是做什么的

oppo手机中的androidView中文是:安卓系统视图。AndroidActivityManager框架 Android-View 的刷新机制Android View 的刷新机制……。

谁知道android 中view 和Viewgroup的关系是什么

View对象是Android平台中用户界面体现的基础单位。View类通常为“widgets(工具)”的子类的基础,它们提供了诸如文本输入框和按钮之类的UI对象的完整实现。ViewGroup类同样为被称为“Layouts(布局)”的子类奠定了基础,它们提供了象流式布局、表格布局以及相对布局之类的布局架构。 

Android的UI界面都是由View和ViewGroup及其派生类组合而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳这些组件的容器,其本身也是从View派生出来的。AndroidUI界面的一般结构可参见:

可见,作为容器的ViewGroup可以包含作为叶子节点的View,也可以包含作为更低层次的子ViewGroup,而子ViewGroup又可以包含下一层的叶子节点的View和ViewGroup。事实上,这种灵活的View层次结构可以形成非常复杂的UI布局,开发者可据此设计、开发非常精致的UI界面。一般来说,开发Android应用程序的UI界面都不会直接实用View和ViewGroup,而是使用这两大基类的派生类。下面我们列举了android中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。

可以在秒秒学上看看Android的课程,讲解的可以,希望对你有帮助。

[Android] View 的继承关系的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于[Android] View 的继承关系、[Android] View 的继承关系的信息别忘了在本站进行查找哦。

android view([Android] View 的继承关系)

本文编辑:admin

更多文章:


虾皮熬汤怎么处理(虾皮怎样做汤吃 虾皮汤怎么做好喝)

虾皮熬汤怎么处理(虾皮怎样做汤吃 虾皮汤怎么做好喝)

本文目录虾皮怎样做汤吃 虾皮汤怎么做好喝紫菜虾皮汤的做法 紫菜虾皮汤怎么做煮汤的时候虾皮什么时候放合适虾汤如何熬制虾皮怎样做汤吃 虾皮汤怎么做好喝1、南瓜虾皮汤 虾皮汤的做法步骤很多,虾皮可以和多种食材搭配做汤。用南瓜和虾皮是最经典的搭配

2024年7月23日 18:28

php简单的接口编写示例(php怎么写接口)

php简单的接口编写示例(php怎么写接口)

本文目录php怎么写接口php怎么写api接口php接口开发教程php中的API接口怎么写 php写一个类实现一个接口的例子php如何开发API接口php 接口大概要怎么写php中如何调用接口以及编写接口代码详解php怎么写接口接口是什么?

2023年11月12日 12:00

腾讯云数据库(腾讯云怎么安装数据库,连接数据库)

腾讯云数据库(腾讯云怎么安装数据库,连接数据库)

本篇文章给大家谈谈腾讯云数据库,以及腾讯云怎么安装数据库,连接数据库对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录腾讯云怎么安装数据库,连

2024年9月6日 17:10

xml文件怎么转换成pdf文件(xml格式的word文档怎么转换为pdf,或者xml格式的word怎么转换成word格式的)

xml文件怎么转换成pdf文件(xml格式的word文档怎么转换为pdf,或者xml格式的word怎么转换成word格式的)

本文目录xml格式的word文档怎么转换为pdf,或者xml格式的word怎么转换成word格式的怎样将xml转PDF(带图片的)C# 把XML转换成PDF文件如何将.xml类型文档转换成文字形式的文档(.txt ; PDF; doc等).

2024年5月18日 07:17

滚珠直线导轨(在数控加工中心中滚珠线轨与滚柱线轨的区别)

滚珠直线导轨(在数控加工中心中滚珠线轨与滚柱线轨的区别)

本文目录在数控加工中心中滚珠线轨与滚柱线轨的区别直线导轨规格滚珠丝杆和梯形丝杆,直线导轨的区别滚珠丝杠与直线导轨的利与弊滚珠直线导轨应用领域有哪些滚珠丝杆和直线导轨的区别滚珠直线导轨和滚柱直线导轨有什么区别呢在数控加工中心中滚珠线轨与滚柱线

2024年7月16日 12:44

vb怎么编程(用vb编写程序)

vb怎么编程(用vb编写程序)

本文目录用vb编写程序怎么VB编程用vb编写程序用VB实现上述功能的函数是:Function fun(m, n) As Integer  Sum = 0  For i = 1 To 100    If i Mod m = 0 Or i Mo

2024年3月7日 13:35

霹雳大喇叭里面王祖贤爸妈的扮演者是谁?霹雳大喇叭演员joanne的母亲的演员是谁

霹雳大喇叭里面王祖贤爸妈的扮演者是谁?霹雳大喇叭演员joanne的母亲的演员是谁

各位老铁们,大家好,今天由我来为大家分享霹雳大喇叭,以及霹雳大喇叭里面王祖贤爸妈的扮演者是谁的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文目录霹雳大喇

2024年7月6日 16:56

三角函数求导公式大全(三角函数求导公式 什么是三角函数)

三角函数求导公式大全(三角函数求导公式 什么是三角函数)

其实三角函数求导公式大全的问题并不复杂,但是又很多的朋友都不太了解三角函数求导公式 什么是三角函数,因此呢,今天小编就来为大家分享三角函数求导公式大全的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录三角函数求导公

2024年7月30日 18:05

datepicker指定可选日期(jquery.datepicker怎么指定日期为每个月最后一天)

datepicker指定可选日期(jquery.datepicker怎么指定日期为每个月最后一天)

本文目录jquery.datepicker怎么指定日期为每个月最后一天datepicker日期控件如何选定多个日期或者当月所有星期一的日期如何限定datepicker的选择日期范围android DatePickerDialog怎么设置日期

2024年7月8日 06:30

proposal词根词缀(请教purpose 的词根词缀 和 词根pose系列单词的意思)

proposal词根词缀(请教purpose 的词根词缀 和 词根pose系列单词的意思)

这篇文章给大家聊聊关于proposal词根词缀,以及请教purpose 的词根词缀 和 词根pose系列单词的意思对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录请教purpose 的词根词缀 和 词根pose系列单词的意思词

2024年8月12日 13:15

win7 powershell下载(怎么在win7系统上下载xboxgamebar)

win7 powershell下载(怎么在win7系统上下载xboxgamebar)

大家好,今天小编来为大家解答以下的问题,关于win7 powershell下载,怎么在win7系统上下载xboxgamebar这个很多人还不知道,现在让我们一起来看看吧!本文目录怎么在win7系统上下载xboxgamebarwin7如何安装

2024年9月1日 00:10

discuz免费移动端模板(MUED(www.visds.com)上的discuz x2免费模板怎样)

discuz免费移动端模板(MUED(www.visds.com)上的discuz x2免费模板怎样)

本篇文章给大家谈谈discuz免费移动端模板,以及MUED(www.visds.com)上的discuz x2免费模板怎样对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题

2024年7月13日 10:17

表格trim函数(excel表格中卡号数字后面的空格怎么一起删除)

表格trim函数(excel表格中卡号数字后面的空格怎么一起删除)

其实表格trim函数的问题并不复杂,但是又很多的朋友都不太了解excel表格中卡号数字后面的空格怎么一起删除,因此呢,今天小编就来为大家分享表格trim函数的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录exce

2024年8月27日 03:10

易语言编程下载官网(用易语言编程)

易语言编程下载官网(用易语言编程)

本篇文章给大家谈谈易语言编程下载官网,以及用易语言编程对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。本文目录用易语言编程易语言怎么用易语言检查程序

2024年7月25日 23:40

钢结构z型檩条有没有正反(Z型檩条为什么孔是竖直的)

钢结构z型檩条有没有正反(Z型檩条为什么孔是竖直的)

这篇文章给大家聊聊关于钢结构z型檩条有没有正反,以及Z型檩条为什么孔是竖直的对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录Z型檩条为什么孔是竖直的钢结构Z型檩条怎么安装c形和z形屋面檩条的翼缘自由边应朝哪个方向檩条z字钢怎么

2024年7月14日 16:16

python3下载手机安卓版(python3手机版)

python3下载手机安卓版(python3手机版)

本文目录python3手机版手机怎样安装python第支持S60 V3的python最新版手机可以用python吗python3手机版在电脑上试了一下,问题在于if后面的冒号,这个冒号是中文输入法所打出来的,所以报错了切换成英文输入法,再打

2023年11月22日 03:40

c语言round函数怎么用(C语言问题,这里怎么实现四舍五入的啊)

c语言round函数怎么用(C语言问题,这里怎么实现四舍五入的啊)

本文目录C语言问题,这里怎么实现四舍五入的啊c语言中如何进行四舍五入,求详细解释!!谢谢!c语言中有没有四舍五入的函数C++中round函数怎么用怎样用c语言把一个小数才能化为整数c语言的四舍五入c语言如何用round编写一个程序定义舍入处

2024年7月12日 14:30

微信小程序和原生APP比起来有什么优势?相比阿里云的飞天系统,腾讯云用的是什么系统

微信小程序和原生APP比起来有什么优势?相比阿里云的飞天系统,腾讯云用的是什么系统

本文目录微信小程序和原生APP比起来有什么优势相比阿里云的飞天系统,腾讯云用的是什么系统为什么要构建公有云原生安全中心微信小程序和原生APP比起来有什么优势我来吧,下面给你来个详细的对比:小程序:基于微信平台开发,享受微信本身自带的流量,这

2024年7月15日 07:33

404 not found nginx是什么(404 NOT FOUNT nginx什么意思)

404 not found nginx是什么(404 NOT FOUNT nginx什么意思)

本文目录404 NOT FOUNT nginx什么意思为什么我的电脑会出现 404 Not Found nginx/1.0.4 有时有不会404 not found nginx 是什么意思织梦网站上传服务器打开登录提示404 Not Fou

2024年7月14日 01:24

mysql存储过程返回(mybatis调用mysql存储过程(返回参数,单结果集,多结果集))

mysql存储过程返回(mybatis调用mysql存储过程(返回参数,单结果集,多结果集))

大家好,关于mysql存储过程返回很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于mybatis调用mysql存储过程(返回参数,单结果集,多结果集)的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,

2024年8月31日 04:45

近期文章

本站热文

iphone vpn设置(ios设置vpn快捷开关)
2024-07-22 15:01:12 浏览:2334
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
2024-07-20 17:26:53 浏览:1731
java安装教程(win10如何安装JAVA)
2024-07-19 19:55:49 浏览:1156
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
2024-07-20 11:15:58 浏览:1152
标签列表

热门搜索