理解Android的layout和measure

  次阅读 作者:智能小宝 来源:互联网 2015-10-13 15:16 我要评论(0)

Android UI开发中,总会有情况需要自定义View和View Group.

什么是View?就是Android中一个基本视图单位,一个Button是一个view, 一个Layout, 也是一个View

什么是ViewGroup, ViewGroup本身也是一种View. 但是ViewGroup能够包含子View. 可以理解为ViewGroup往往是一个容器。比如说LinearLayout, FrameLayout就是属于ViewGroup.

measure和layout是非常重要的两个概念

measure设置view的大小,如果有child view, 循环调用其measure函数

layout摆放child view的位置

举一个例子,我需要在程序中显示一个页面A, 该页面包括两个子view A1, A2.

那么我就需要为A创建一个ViewGroup的继承类。在里面重写OnMeasure函数。伪代码如下:

OnMeasure(){

设置A自身大小

A1.measure //调用子view的measure函数

A2.measure//调用子view的measure函数

}

然后重写OnLayout函数。伪代码如下:

OnLayout(){

设置A1位置

设置A2位置。

}

然后在A1和A2中,重写OnMeasure函数,设置自身大小

A1:

OnMeasure{

设置自身大小

}

A2:

OnMeasure{

设置自身大小

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

但是疑问就来了,为毛要这么麻烦?位置和大小难道不能在xml布局中就指定吗?

我只能回答:擦!我也这样看

但是安卓的设计师们,心怀天下,一心想干出个能应对世界无数种尺寸,面对无数种环境,灵活性伸缩性好比小弟弟的UI框架来。于是......

比如说,他们认为有一种容器,叫LinearLayout。于是就创造了它。 这种神奇的容器,在把子view放入里面的时候,不需要指定其大小,只需要说一句:我和俺爹一样大。于是“啪”,这个字View被贴上一个"Match_parent"标签

也不需要指定位置。因为你的位置总是接在前面一个子View的后面。

哇色!!!!,如果你第一次看到这么神奇的容器,把东西扔进去不需要指定长宽和位置就直接摆放,觉得真的真的好牛逼哦。

但其实不然,一个View如果被放进来,并且标注自身为Match_parent的时候,就会在OnMeasure里面被一顿计算,因为parent大小总是知道的吧,最大不过屏幕嘛,结合margin和padding,就可以被计算出长宽。关于位置。由于所有View都是顺序摆放的,在layout过程中也会结合margin和Padding,给计算出准确的位置。

这么麻烦?绕这么大个圈?那是不是可以直接指定大小和位置呢?

No. 大小可以直接指定,位置不可以直接指定。

为啥位置不能直接指定?

因为这个是LinearLayout,如果你想随意指定位置的,用其他的layout嘛,或者你自己自定义嘛

= =~,再也不想哇色了,我还不如像其他平台一样,直接画一个View出来,往里面随便摆放东西,自己指定大小位置。也不分什么View和ViewGroup了。这些伟大的白痴们,精心设计了一团复杂无比的垃圾

为啥需要measure和layout?为啥不在xml布局阶段就指定大小位置?

别告诉我是为了扩展性的需要,

别告诉我是为了灵活性的需要,

别告诉我是因为手机屏幕尺寸各式各样

No.

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...