• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android MeasuerSpce的由来及使用

Android MeasuerSpce的由来及使用

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android名字的由来,android的由来,android线程池的使用,android定时器的使用,android sqlite使用等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android MeasuerSpce的由来及使用


含义:MeasuerSpce是parent传递给child的一组测量值(size)和模式(mode)的组合。

使用场景:经常我们会在child的onMeasure(int widthMeasureSpec,int heightMeasureSpec)这个函数中来对spec进行处理,用于确定child的长和宽。

\

这里我们看到MeasureSpec有3中测量模式:

MeasureSpec.AT_MOST :child最多达到parent的大小,这一类通常归于"wrap_content"。

MeasureSpec.EXACTLY:child的大小是一个确定的值,这一类通常归于"match_parent"或者是一个确定的值。

MeasureSpec.UNSPECIFED:这个几乎不用,未指定,child可以得到自己想要的任何大小。

Measure的makeMeasureSpec,getMode,getSize我这里就不多说了,很简单就是一个位运算。

 

说了半天,到底这个widthMeasureSpec和heightMeasureSpec怎么来的呢?这就需要看看源码。

我们知道View的测量和绘制都是通过它的parent来触发的,所以直接进ViewGroup

切入点就是measure:

\

这里我们又看到一个parentWidthMeasureSpec和parentHeightSpec,这里我们先不管,大概知道这个是它的parent给它的spec。

继续进入函数:

\

可以看到,这里在switch(mode)和我们处理view的onMeasure差不多。

继续向下:

\

到这里,spec就已经组合好了,下一步应该是传递给child计算了。\

\

到这里为止,viewgroup的测量就算完成了。接下来就是交给child自己计算,也就回到了,我们最初的onMeasure函数中。

上面我们还说到了这个parentWidthMeasureSpec和parentHeightSpec,其实也就是当前viewgroup的parent给它的测量模式和值。遵循上面的步骤,一模一样。

 

所以以后像遇到这个问题,解决思路和办法就很简单了。

View view=getLayoutInflater().inflate(R.layout.layout_item, null);

Toast.makeText(MainActivity.this, "view_w="+view.getMeasuredWidth()+","+view.getLayoutParams(), 0).show();

\

为啥view的宽度为0,layoutparams为null?

view的宽度为0,很明显:就是view没有measure,因为我们是从一个xml文件中pull解析出来的一个view,它没有parent更没有parent测量,所以为0.

解决办法就是measure,view.measure(0,0)一下;我们传0,0,最终也就是view自己测量自己。这里还有一个layoutparams为null,为啥呢?

我们知道layoutParams是parent给child的布局参数。在view的源码中我们看到

\

还有get,set方法

\

我们回到viewGroup中。

 

\

这里我们看到addview会传递一个params,这个params怎么来的呢?

\

这里我们看到了child的layoutparams是在addview中赋值的,所以上面的layoutinflate的view因为没有parent所以就没有layoutparams。

解决办法:

\

欢迎大家指正和批评!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android MeasuerSpce的由来及使用

相关文章

  • 2017-05-26Android 急速发布项目到 JitPack,androidjitpack
  • 2017-05-26自定义控件添加自定义属性问题,控件添加自定义属性
  • 2017-05-26明明已经执行Log.i,偏偏打不出日志,执行log.i日志
  • 2017-05-26HBase Thrift2 CPU过高问题分析
  • 2017-05-26Android开发重点难点1:RelativeLayout(相对布局)详解,
  • 2017-05-26Android java层音频相关的分析与理解(三)调用相关
  • 2017-05-26Android安全专项-利用androguard分析微信
  • 2017-05-26Android面试准备 第一天 第2-4例
  • 2017-05-26Android中View的滑动冲突——Android开发艺术探索笔记
  • 2017-05-26简单的数据类型转换的工具类,数据类型工具类

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android5.0开发范例大全 读书笔记(四),android5.0范例
    • Amazon Alexa登录授权(Android),amazonandroid
    • Android 调用百度地图API,androidapi
    • 极其简单的搭建eclipse的android开发环境,搭建eclipseandroid
    • hellocharts-android-Android图表开源库的使用(二)
    • Android 中基于 Binder的进程间通信,androidbinder
    • 策略模式,java策略模式
    • 安卓学习----使用okHttp(get方式)---下载图片,
    • Java Web 开发填坑记- 如何正确的下载 Eclipse,javaeclipse
    • Java虚拟机 JVM,java虚拟机jvm

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有