Android 中的View与ViewGroup
Android重点知识——View
和ViewGroup
与自定义控件
作者:丁明祥
邮箱:2780087178@qq.com
一、基础
ViewGroup 参考资料:
View参考资料:
1.概念
Android中的View包含用户交互和显示,ViewGroup继承自View,主要充当View的容器。
ViewGroup和它的孩子们(View和ViewGroup)以树形结构形成了一个层次结构,View类有接受和处理消息的功能,android系统所产生的消息会在这些ViewGroup和 View之间传递。
2.在自定义控件时继承ViewGroup和View的区别(这个地方上次面试被坑了一把)
测量:onMeasure()
设置自己显示在屏幕上的宽高(自定义View中不一定要用,在ViewGroup中使用到)
布局:onLayout()
设置自己显示在屏幕上的位置(自定义View中一定不实用,只有在自定义ViewGroup中用到)
绘制:onDraw()
在显示屏幕中绘制(自定义View中一定使用到,但自定义Viewgroup时不需要)
自定义ViewGroup:
在
onMeasure()
中计算childView的测量值以及模式,以及设置自己的宽和高。
解释一下测量模式:
EXACTLY:表示设置了精确的值,一般当childView设置其宽、高为精确值、match_parent时,ViewGroup会将其设置为EXACTLY;
AT_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;
还有一种,没想到在哪儿用,懒得写
在
onLayout()
中设置childView的绘制区域。
自定义View:
Android 中自定义View的主要步骤:
定义View的属性,
res/values/attrs.xml
,属性值类型包括string,color,demension,integer,enum,reference,float,boolean,fraction,flag。在构造方法中获得定义好的样式属性
重写
onMeasure()
,获得我们自己设置的大小,当我们设置明确的宽度和高度时,系统帮我们测量的结果就是我们设置的结果,当我们设置为WRAP_CONTENT或者MATCH_PARENT,系统帮我们测量的结果就是MATCH_PARENT的长度。所以,当设置了WRAP_CONTENT时,我们需要自己进行测量,即重写onMesure方法”
重写onDraw()将自定义的视图在屏幕上绘制出来。
在布局中使用自定义View。
二、深入(这一部分可能还要长期修改,)
3.深入Android中的View和ViewGroup
参考资料:
Android群英传 第三章
要理解Android中的View和ViewGroup必须要理解,
1)ViewGroup由View继承而来,ViewGroup又是布局文件和View容器的基类
- 在这个类里定义了ViewGroup.LayoutParams类,这个类是布局参数的子类。
2)ViewGroup是作为容器存在的,在该容器中可存放View和ViewGroup。
在我们写Android布局文件的时候,会告诉布局文件(容器)我们的View的宽度,高度,对齐方式,margin等,所以:
- ViewGroup的职能为:给childView计算出建议的宽和高和测量模式 ,决定childView的位置。
- View的职责,根据测量模式和ViewGroup给出的建议的宽和高,计算出自己的宽和高,同时在ViewGroup中绘制。
从API角度来看:
- View的根据ViewGroup传人的测量值和模式,对自己宽高进行确定(onMeasure中完成),然后在onDraw中完成对自己的绘制
- ViewGroup需要给View传入view的测量值和模式(onMeasure中完成),而且对于此ViewGroup的父布局,自己也需要在onMeasure中完成对自己宽和高的确定。此外,需要在onLayout中完成对其childView的位置的指定。
3.1 作为容器的ViewGroup
ViewGroup是一个容器,其采用一个数组来存储这些子View 实现private View[] mChildren;
3.2 ViewGroup中的增删查算法
由于是通过一个数组来存储View数据的,所以对于ViewGroup来说其必须实现增、删、查的算法。
- 增加
- 移除
- 查询
Android 中的View与ViewGroup的更多相关文章
- android中实现view可以滑动的六种方法续篇(二)
承接上一篇,上一篇中讲解了实现滑动的第五种方法,如果你还没读过,可点击下面链接: http://www.cnblogs.com/fuly550871915/p/4985482.html 这篇文章现在来 ...
- Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件
UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放 ...
- 详解实现Android中实现View滑动的几种方式
注: 本文提到的所有三种滑动方式的完整demo:ScrollDemo 1. 关于View我们需要知道的 (1)什么是View? Android中的View类是所有UI控件的基类(Base class) ...
- Android界面的View以及ViewGroup的区别
因为这个问题会经常成为面试的热点,所以我们来谈谈View以及ViewGroup的区别. 先看看View及ViewGroup类关系 Android View和ViewGroup从组成架构上看,似乎 ...
- Android中自定义View和自定义动画
Android FrameWork 层给我们提供了很多界面组件,但是在实际的商业开发中这些组件往往并不能完全满足我们的需求,这时候我们就需要自定义我们自己的视图和动画. 我们要重写系统的View就必须 ...
- Android中父View和子view的点击事件的执行过程
Android中的事件类型分为按键事件和屏幕触摸事件,Touch事件是屏幕触摸事件的基础事件,有必要对它进行深入的了解. 一个最简单的屏幕触摸动作触发了一系列Touch事件:ACTION_DOWN- ...
- Android之UI View与ViewGroup
1.基本概念 View:所有可视化控件的父类,Android App屏幕上用户可以交互的对象(例如 按钮 下拉框 文本框等). ViewGroup:View的子类,存放View和ViewGroup对象 ...
- android开发:Android 中自定义View的应用
大家好我们今天的教程是在Android 教程中自定义View 的学习,对于初学着来说,他们习惯了Android 传统的页面布局方式,如下代码: <?xml version="1.0&q ...
- android中自定义view构造函数ContentItemView(Context context, AttributeSet paramAttributeSet)的用处
自己定义一个view <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...
随机推荐
- 『MicroPython』Hello uPy
官网买了几乎全套.一路曲折:7月10号下单,13号发货,14号法兰克福过关,23号到北京,25号到上海,27号到沪C:沪C邮局投3次未果,中彩票一样终于打通了投递部电话才在次日28号“妥投”:又因出差 ...
- eclipse的小技巧
Eclipse 保存文件时自动格式化代码 很多同学不知道Eclipse有个很有用的功能,就是自动格式源代码的功能,一般大家都是直接Ctrl+Shift+F手动格式化,多浪费时间. 其实Eclipse里 ...
- Django使用中常见的错误
Django Mysql SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED Django 执行makemigrations 的时候报错 ...
- DAO DTO VO BO
DAO叫数据访问对象DTO是数据传输对象DAO通常是将非对象数据(如关系数据库中的数据)以对象的方式操纵.DTO通常用于不同层(UI层.服务层或者域模型层)直接的数据传输,以隔离不同层,降低层间耦合 ...
- 算法46----移除K位数字
一.题目:移除K位数字 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示 ...
- 训练1-E
有二个整数,它们加起来等于某个整数,乘起来又等于另一个整数,它们到底是真还是假,也就是这种整数到底存不存在,实在有点吃不准,你能快速回答吗?看来只能通过编程. 例如: x + y = 9,x * y ...
- Ansible常见问题处理
1.ansible all -m ping报错,信息如下: [WARNING]: log file at /var/log/ansible.log is not writeable and we ca ...
- Windows使用docker打开新窗口error解决办法
环境 win7 Error: error during connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.26/containers/json ...
- POJ 3737
第一道三分题,有模板 #define eps 10e-6 double cal(){}//计算题目所需要的值 while(l+eps<r) { m1=l+(r-l)/3; m2=r-(r-l)/ ...
- CSU 1541 There is No Alternative (最小生成树+枚举)
题目链接:传送门 题意: 有n个点.m条边.要使n个点所有连起来且要花费最小.问有哪些边是必需要连的. 分析: 要使花费最小肯定是做最小生成树.可是题目要求哪些边是必需要用的.我们能够 这样思考,我们 ...