1、概述
1、ViewGroup的职责是啥?
ViewGroup相当于一个放置View的容器,并且我们在写布局xml的时候,会告诉容器(凡是以layout为开头的属性,都是为用于告诉容器的),我们的宽度(layout_width)、高度(layout_height)、对齐方式(layout_gravity)等;当然还有margin等;于是乎,ViewGroup的职能为:给childView计算出建议的宽和高和测量模式 ;决定childView的位置;为什么只是建议的宽和高,而不是直接确定呢,别忘了childView宽和高可以设置为wrap_content,这样只有childView才能计算出自己的宽和高。
2、View的职责是啥?
View的职责,根据测量模式和ViewGroup给出的建议的宽和高,计算出自己的宽和高;同时还有个更重要的职责是:在ViewGroup为其指定的区域内绘制自己的形态。
3、ViewGroup和LayoutParams之间的关系?
大家可以回忆一下,当在LinearLayout中写childView的时候,可以写layout_gravity,layout_weight属性;在RelativeLayout中的childView有layout_centerInParent属性,却没有layout_gravity,layout_weight,这是为什么呢?这是因为每个ViewGroup需要指定一个LayoutParams,用于确定支持childView支持哪些属性,比如LinearLayout指定LinearLayout.LayoutParams等。如果大家去看LinearLayout的源码,会发现其内部定义了LinearLayout.LayoutParams,在此类中,你可以发现weight和gravity的身影。
2、View的3种测量模式
上面提到了ViewGroup会为childView指定测量模式,下面简单介绍下三种测量模式:
EXACTLY:表示设置了精确的值,一般当childView设置其宽、高为精确值、match_parent时,ViewGroup会将其设置为EXACTLY;
AT_MOST:表示子布局被限制在一个最大值内,一般当childView设置其宽、高为wrap_content时,ViewGroup会将其设置为AT_MOST;
UNSPECIFIED:表示子布局想要多大就多大,一般出现在AadapterView的item的heightMode中、ScrollView的childView的heightMode中;此种模式比较少见。
注:上面的每一行都有一个一般,意思上述不是绝对的,对于childView的mode的设置还会和ViewGroup的测量mode有一定的关系;当然了,这是第一篇自定义ViewGroup,而且绝大部分情况都是上面的规则,所以为了通俗易懂,暂不深入讨论其他内容。
3、从API角度进行浅析
上面叙述了ViewGroup和View的职责,下面从API角度进行浅析。
View的根据ViewGroup传人的测量值和模式,对自己宽高进行确定(onMeasure中完成),然后在onDraw中完成对自己的绘制。
ViewGroup需要给View传入view的测量值和模式(onMeasure中完成),而且对于此ViewGroup的父布局,自己也需要在onMeasure中完成对自己宽和高的确定。此外,需要在onLayout中完成对其childView的位置的指定。
相关推荐
在Android开发中,自定义ViewGroup是实现复杂布局和交互的关键技术之一。本实战篇将聚焦于如何实现一个名为FlowLayout的自定义布局,它允许子视图按行排列,类似于HTML中的`<div>`标签。在Android应用设计中,...
在Android开发中,自定义ViewGroup是实现复杂布局或独特交互效果的重要手段。本文将对如何在Android中创建和使用自定义ViewGroup进行总结,并提供一个具体的实例来演示如何为Child View设置属性。 首先,我们要了解...
在Android开发中,自定义ViewGroup是实现复杂布局或创新交互设计的重要手段。本文将深入探讨如何创建一个自定义的“流式布局”(MyFlowLayout),这个布局会根据屏幕尺寸自动调整子视图的位置,使其从左到右、从上到...
在Android开发中,创建具有指定圆角的ViewGroup是一个常见的需求,这可以帮助开发者设计出更加美观和具有现代感的用户界面。"Android-可以指定圆角的ViewGroup"这个主题聚焦于如何在Android应用中实现自定义的布局,...
在Android开发中,`ViewGroup`和`View`是构建用户界面的核心组件。`View`是所有UI元素的基类,而`ViewGroup`则是一个特殊的`View`,它能够包含多个子`View`,形成了Android UI的层级结构。这份源码提供了深入理解这...
你需要编写逻辑来决定每个子视图在ViewGroup中的确切位置。 3. **onDraw()**: 虽然在自定义ViewGroup时,通常不直接绘制内容,但如果你的ViewGroup需要自己的视觉元素,你需要重写此方法。通常,ViewGroup的绘图...
在Android开发中,自定义ViewGroup是实现复杂布局和交互效果的重要手段。SlidingMenu是一种常见的界面组件,常用于实现侧滑菜单效果,类似于许多应用(如Google Play、Facebook等)中的导航栏。本资源提供的就是一个...
在Android开发中,自定义ViewGroup是创建独特用户界面的关键技术之一。本篇文章将深入探讨如何利用自定义ViewGroup来构建各种风格的SlidingMenu,一种常见的应用组件,用于实现类似抽屉效果的导航菜单。SlidingMenu...
在Android开发中,`ViewGroup`是所有布局容器的基础类,它允许我们组合多个视图并管理它们的布局。而`TabHost`则是一个用于创建带有选项卡的用户界面组件,通常用来组织多个相关的活动(Activities)或者片段...
在Android开发中,自定义ViewGroup是实现独特用户界面效果的重要手段。ArcMenu是一个非常吸引人的设计,它呈现了一个扇形的菜单布局,通常用于显示一些可点击的图标或者选项,这种设计通常会给人一种优雅而直观的...
今天看到很多app都有Title自动隐藏功能,1.这是一个Gradle工程,Gradle的版本是2.10,项目的Compile sdk Version是 23 , Build ...Android自定义ViewGroup实现Title自动隐藏功能源代码分享,Android开发者必看示例。
`ViewGroup`是Android UI层次结构中的容器类,它负责管理子视图(`View`或`ViewGroup`)的位置和大小。当我们需要自定义布局行为,如特殊的排列方式、交互效果等,就需要继承`ViewGroup`并重写其关键方法。 1. **...
在Android开发中,自定义ViewGroup是提升应用用户体验和实现独特设计的重要手段。本文将深入讲解如何通过自定义ViewGroup来模拟ScrollView的功能,让你更好地理解Android视图层次结构的构建和滚动机制。 首先,了解...
在Android开发中,自定义ViewGroup是实现复杂布局和交互效果的重要手段。本文将深入探讨如何自定义ViewGroup,从基础概念到实际操作,再到优化技巧,帮助开发者更好地理解和运用这一技术。 首先,理解ViewGroup的...
在Android开发中,自定义ViewGroup是创建复杂布局或实现特定功能的重要手段。"android自定义viewgroup实现等分格子布局"这个话题涉及到如何利用自定义ViewGroup类来创建一个能够平均分配屏幕空间的网格布局。下面...
在Android开发中,自定义ViewGroup是提升应用用户体验和界面设计灵活性的重要手段。这篇博客文章“Android自定义ViewGroup(一)”详细介绍了如何从零开始创建一个自定义的ViewGroup,以及在这个过程中可能遇到的...
在Android开发中,自定义ViewGroup是扩展布局功能的关键手段,尤其当系统提供的LinearLayout、RelativeLayout、FrameLayout等标准布局无法满足复杂界面设计时。本文将详细介绍如何实现一个自定义的ViewGroup,以...
在Android开发中,View和ViewGroup是构建用户界面的基础组件,它们共同负责UI的绘制和交互。这篇博客将深入探讨这两个关键概念,以及手势监听的相关顺序和应用。 首先,我们来理解View。在Android中,View是所有UI...
ArcGIS for Android中,地图组件就是MapView,MapView是基于Android中ViewGroup的一个类(参考),也是ArcGIS Runtime SDK for Android中的地图容器,与很多ArcGIS API中的Map、MapControl类的作用是一样的。...
在Android开发中,自定义ViewGroup是实现复杂布局和交互的关键技术之一。本文将深入探讨如何实现一个名为FlowLayout的自定义视图组,它是一种标签流容器,允许子视图按照从左到右、从上到下的顺序排列,类似于HTML中...