当前位置: 首页 > news >正文

xp配置网站服务器网络营销推广公司名称

xp配置网站服务器,网络营销推广公司名称,seo网站排名查询,投资建设一个网站多少钱1. MeasureSpec类 MeasureSpec用来计算子视图的大小,有三种类型,UNSPECIFIED、EXACTLY和AT_MOST。 UNSPECIFIED表示未定义,即父控件未做限制,可以为任何值,一般设置为0。EXACTLY表示实际值,即父容器已经指…

1. MeasureSpec类

MeasureSpec用来计算子视图的大小,有三种类型,UNSPECIFIEDEXACTLYAT_MOST

  • UNSPECIFIED表示未定义,即父控件未做限制,可以为任何值,一般设置为0。
  • EXACTLY表示实际值,即父容器已经指定了具体的值。
  • AT_MOST表示父容器提供了最大值,但子控件可以选择自己的范围。

使用静态方法来获取实际的modesize

public static int getMode(int measureSpec)
public static int getSize(int measureSpec)

2. View的measure方法

measure(int, int)方法计算高宽,调用onMeasure(int, int)方法计算或setMeasuredDimensionRaw(int, int)方法设置。

public final void measure(int widthMeasureSpec, int heightMeasureSpec) {... ...int cacheIndex = forceLayout ? -1 : mMeasureCache.indexOfKey(key);if (cacheIndex < 0 || sIgnoreMeasureCache) {// measure ourselves, this should set the measured dimension flag backonMeasure(widthMeasureSpec, heightMeasureSpec);mPrivateFlags3 &= ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;} else {long value = mMeasureCache.valueAt(cacheIndex);// Casting a long to int drops the high 32 bits, no mask neededsetMeasuredDimensionRaw((int) (value >> 32), (int) value);mPrivateFlags3 |= PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;}... ...
}

onMeasure(int, int)方法,调用setMeasuredDimension(int, int)方法来设置实际的宽和高,getDefaultSize(int, int)方法获取默认的宽高。

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}

getDefaultSize(int, int)方法中,使用MeasureSpec来获取modesize,并返回计算后的值。当modeUNSPECIFIED时,返回默认值,否则返回建议值。

public static int getDefaultSize(int size, int measureSpec) {int result = size;int specMode = MeasureSpec.getMode(measureSpec);int specSize = MeasureSpec.getSize(measureSpec);switch (specMode) {case MeasureSpec.UNSPECIFIED:result = size;break;case MeasureSpec.AT_MOST:case MeasureSpec.EXACTLY:result = specSize;break;}return result;
}

setMeasuredDimension(int, int)方法同样调用setMeasuredDimensionRaw(int, int)方法设置宽高

protected final void setMeasuredDimension(int measuredWidth, int measuredHeight) {... ...setMeasuredDimensionRaw(measuredWidth, measuredHeight);
}

3. ViewGroup的measureChild方法

ViewGroup除了需要计算自身的宽高以外,还要计算子控件的宽高,系统提供了measureChildren(int, int)measureChild(View, int, int)getChildMeasureSpec(int, int, int)来支持一般的操作。

measureChildren(int, int)方法,只要childVisibility不是GONE,就计算child的宽高,调用measureChild方法

protected void measureChildren(int widthMeasureSpec, int heightMeasureSpec) {final int size = mChildrenCount;final View[] children = mChildren;for (int i = 0; i < size; ++i) {final View child = children[i];if ((child.mViewFlags & VISIBILITY_MASK) != GONE) {measureChild(child, widthMeasureSpec, heightMeasureSpec);}}
}

measureChild(View, int, int)方法,使用getChildMeasureSpec(int, int, int)方法获得宽高,最后调用View.measure(int, int)方法设置。

protected void measureChild(View child, int parentWidthMeasureSpec,int parentHeightMeasureSpec) {final LayoutParams lp = child.getLayoutParams();final int childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec,mPaddingLeft + mPaddingRight, lp.width);final int childHeightMeasureSpec = getChildMeasureSpec(parentHeightMeasureSpec,mPaddingTop + mPaddingBottom, lp.height);child.measure(childWidthMeasureSpec, childHeightMeasureSpec);
}

getChildMeasureSpec(int, int, int)方法,根据ViewGroupmode分为三种情况,如果childDimension大于0,则直接指定。

public static int getChildMeasureSpec(int spec, int padding, int childDimension) {int specMode = MeasureSpec.getMode(spec);int specSize = MeasureSpec.getSize(spec);int size = Math.max(0, specSize - padding);int resultSize = 0;int resultMode = 0;switch (specMode) {// Parent has imposed an exact size on uscase MeasureSpec.EXACTLY:if (childDimension >= 0) {resultSize = childDimension;resultMode = MeasureSpec.EXACTLY;} else if (childDimension == LayoutParams.MATCH_PARENT) {// Child wants to be our size. So be it.resultSize = size;resultMode = MeasureSpec.EXACTLY;} else if (childDimension == LayoutParams.WRAP_CONTENT) {// Child wants to determine its own size. It can't be// bigger than us.resultSize = size;resultMode = MeasureSpec.AT_MOST;}break;// Parent has imposed a maximum size on uscase MeasureSpec.AT_MOST:if (childDimension >= 0) {// Child wants a specific size... so be itresultSize = childDimension;resultMode = MeasureSpec.EXACTLY;} else if (childDimension == LayoutParams.MATCH_PARENT) {// Child wants to be our size, but our size is not fixed.// Constrain child to not be bigger than us.resultSize = size;resultMode = MeasureSpec.AT_MOST;} else if (childDimension == LayoutParams.WRAP_CONTENT) {// Child wants to determine its own size. It can't be// bigger than us.resultSize = size;resultMode = MeasureSpec.AT_MOST;}break;// Parent asked to see how big we want to becase MeasureSpec.UNSPECIFIED:if (childDimension >= 0) {// Child wants a specific size... let him have itresultSize = childDimension;resultMode = MeasureSpec.EXACTLY;} else if (childDimension == LayoutParams.MATCH_PARENT) {// Child wants to be our size... find out how big it should// beresultSize = View.sUseZeroUnspecifiedMeasureSpec ? 0 : size;resultMode = MeasureSpec.UNSPECIFIED;} else if (childDimension == LayoutParams.WRAP_CONTENT) {// Child wants to determine its own size.... find out how// big it should beresultSize = View.sUseZeroUnspecifiedMeasureSpec ? 0 : size;resultMode = MeasureSpec.UNSPECIFIED;}break;}//noinspection ResourceTypereturn MeasureSpec.makeMeasureSpec(resultSize, resultMode);
}

相关文章
Android 自定义流式布局
Android measure方法详解

http://www.dt0577.cn/news/48986.html

相关文章:

  • 网站开发包括几个部分进入百度app
  • 无锡网站建设原则国外网站seo免费
  • 泸州大浪科技做网站seo实战密码第三版
  • 贸易公司网站制作网站查询关键词排名软件
  • 建设部网站质量终身责任承诺书搜狗友链交换
  • 新网站做外链东莞seo广告宣传
  • 全国哪个餐饮品牌的网站做的好现在推广用什么平台
  • wordpress导航函数网络seo优化
  • 医院网站优化如何免费引流推广
  • 网站外包开发 代码的版权问题源码之家
  • 厦门软件外包公司宁波seo博客
  • 建设自己公司的网站首页电商运营怎么自学
  • 炫酷业务网站怎么建网页
  • 海口做网站公司天津做优化好的公司
  • 美国白宫网站开发百度一下你就知道啦
  • 唐山网站建设报价外贸网站建设报价
  • 小网站托管费用个人网站规划书模板
  • 云南企业建站seo优化专员编辑
  • 网站原型图设计软件企业推广的网站
  • 自做网站好做吗爱站网怎么使用
  • 给公司做网站风险百度大搜推广开户
  • 做外贸怎么进入国外的网站北京核心词优化市场
  • 宝塔软件做网站怎么创建公司网站
  • 如何查网站域名备案windows优化大师软件介绍
  • 长沙房价2023年最新房价seo优化排名教程百度技术
  • 企业网站建设的原则万能bt搜索引擎网站
  • 如何用java做网站seo优化方案模板
  • 花卉网站建设的总结与东莞seo优化排名
  • 免费制作微信小程序软件关键词优化排名怎么做
  • 江苏省城乡和住房建设厅网站首页宁波seo外包方案