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

黄山市建设工程造价管理站网站用手机搭建wordpress

黄山市建设工程造价管理站网站,用手机搭建wordpress,做网站意义,沙洋县seo优化排名价格一、重写onMeasure()来修改已有的View的尺寸 步骤#xff1a; 重写 onMeasure()#xff0c;并调用 super.onMeasure() 触发原先的测量用 getMeasuredWidth() 和 getMeasuredHeight() 取到之前测得的尺寸#xff0c;利用这两个尺寸来计算出最终尺寸使用 setMeasuredDimensio… 一、重写onMeasure()来修改已有的View的尺寸 步骤 重写 onMeasure()并调用 super.onMeasure() 触发原先的测量用 getMeasuredWidth() 和 getMeasuredHeight() 取到之前测得的尺寸利用这两个尺寸来计算出最终尺寸使用 setMeasuredDimension() 保存尺寸 代码 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {//先执行原测量算法super.onMeasure(widthMeasureSpec, heightMeasureSpec);//获取原先的测量结果int measureWidthgetMeasuredWidth();int measureHeightgetMeasuredHeight();//利用原先的测量结果计算出新的尺寸if(measureWidthmeasureHeight){measureWidthmeasureHeight;}else{measureHeightmeasureWidth;}//保存计算后的结果setMeasuredDimension(measureWidth,measureHeight);} ​ 二、重写onMeasure()来全新计算自定义View的尺寸 步骤 重写 onMeasure0) 把尺寸计算出来把计算的结果用 resolveSize() 过滤一遍后保存 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {...measuredWidth...;measuredHeight...;measuredWidthresolveSize(measuredWidth,widthMeasureSpec);measuredHeightresolveSize(measuredHeight,heightMeasureSpec);setMeasuredDimension(measuredWidth,measuredHeight);} onMeasure方法的两个参数 widthMeasureSpec和heightMeasureSpec是父View对子View的尺寸限制子View在计算自己尺寸的时候需要遵守这两个参数所包含的限制MeasureSpec。 理解MeasureSpec 在 Android 中View 的大小是由父容器和 View 自身的测量规格MeasureSpec共同决定的。 MeasureSpec 由大小和测量模式组成测量模式有三种取值 UNSPECIFIED未指定父容器对子 View 没有施加任何限制子 View 可以任意大小。 EXACTLY精确父容器已经为子 View 精确指定了大小子 View 应该匹配这个大小。 AT_MOST至多子 View 可以是任何大小但不能超过父容器指定的大小。 MeasureSpec 是通过静态方法 MeasureSpec.makeMeasureSpec() 创建的该方法接受两个参数大小和测量模式。在自定义 View 或者自定义布局中我们通常会使用 MeasureSpec 来测量子 View 的大小并根据测量模式来决定子 View 的大小。 在自定义 View 中我们通常会在 onMeasure() 方法中使用 MeasureSpec 来测量 View 的大小。在这个方法中我们可以通过 MeasureSpec.getMode() 和 MeasureSpec.getSize() 方法来获取测量模式和大小然后根据这些信息来确定 View 的最终大小。 解释resolveSize这个方法 //代码简化不是源码 public static int resolveSize(int size, int measureSpec) {final int specMode MeasureSpec.getMode(measureSpec);final int specSize MeasureSpec.getSize(measureSpec);switch (specMode) {case MeasureSpec.AT_MOST:if (specSize size) {result specSize | MEASURED_STATE_TOO_SMALL;} else {result size;}break;case MeasureSpec.EXACTLY:result specSize;break;case MeasureSpec.UNSPECIFIED:default:result size;} } resolveSize这个方法父View传进来的尺寸限制measureSpec是由类型和尺寸值组成的首先要调用MeasureSpec.getModemeasureSpec方法和MeasureSpec.getSize(measureSpec)方法获取限制measureSpec的类型mode和size尺寸值。 限制的类型mode MeasureSpec.AT_MOST 限制上线 MeasureSpec.EXACTLY 限制固定尺寸 MeasureSpec.UNSPECIFIED 无限制 三、重写onMeasure和onLayout来全新计算自定义ViewGroup的内部布局 onMeasure的重写对于ViewGroup来说包含三部分内容 步骤 调用每个子View的measure让子View自我测量根据子View给出的尺寸得出子View的位置并保存它们的位置和尺寸根据子View的位置和尺寸计算出自己的尺寸并用setMeasuredDimension()保存 理解LayoutParams 在父View里调用子View的getLayoutParams方法可以获得一个LayoutParams对象它包含了xml文件里的layout_打头的参数的对应值其中它的width和height这两个属性就分别对应了layout_width和layout_height的值并且是转换过了的值。 Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { ​for(int i0;igetChildCount();i){View childViewgetChildAt(i);LayoutParams lpchildView.getLayoutParams();//lp.height   lp.width}} 结合自己的可用空间来计算出对子View的宽度和高度的限制 可以根据layout_width和layout_height的值分成三种情况 第一种情况固定值 不需要考虑可用空间的问题直接用EXACTLY把子View尺寸限制为这个固定值就可以了。 第二种情况match_parent 把子View的尺寸限制为固定值可用宽度或者高度 可用空间的判断方法 根据自己的MeasureSpec中mode的不同 1.EXACTLY/AT_MOST   可用空间MeasureSpec中的size 2.UNSPECIFIED     可用空间无限大 第三种情况wrap_content 不能超过父View的边界的情况下子View自己测量 public class SomeView extends ViewGroup { ...Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {...for(int i0;igetChildCount();i){View childViewgetChildAt(i);LayoutParams lpchildView.getLayoutParams();int selfwidthSpecModeMeasureSpec.getMode(widthMeasureSpec);int selfwidthSpecSizeMeasureSpec.getSize(widthMeasureSpec);switch (lp.width){case MATCH_PARENT:if(selfwidthSpecModeEXACTLY||selfwidthSpecModeMeasureSpec.AT_MOST){childWidthSpecMeasureSpec.makeMeasureSpec(selfwidthSpecSize-usedWidth,EXACTLY);}else{childWidthSpecMeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);}break;case WRAP_CONTENT:if(selfwidthSpecModeEXACTLY||selfwidthSpecModeMeasureSpec.AT_MOST){childWidthSpecMeasureSpec.makeMeasureSpec(selfwidthSpecSize-usedWidth,MeasureSpec.AT_MOST);}else{childWidthSpecMeasureSpec.makeMeasureSpec(0,MeasureSpec.UNSPECIFIED);}break;default:childWidthSpecMeasureSpec.makeMeasureSpec(lp.width, EXACTLY);break;}}} } 关于保存子View位置的两点说明 1.不是所有的Layout都需要保存子View的位置因为有的Layout可以在布局阶段实时推导出子View的位置例如LinearLayout 2.有时候对某些子View需要重复测量两次或多次才能得到正确的尺寸和位置 重写onLayout来摆放子View Overrideprotected void onLayout(boolean changed, int l, int t, int r, int b) {for(int i0;igetChildCount();i){View childViewgetChildAt(i);childView.layout(childLeft[i],childTop[i],childRight[i],childBottom[i]);}}
http://www.hkea.cn/news/14329903/

相关文章:

  • 平度市城市建设局网站在网站建设中 为了防止工期拖延
  • 电子商务网站建设人才浙江公司响应式网站建设推荐
  • 网站建设与网页设计专业的证明做二维码打款网站链接
  • 网站建设 psd九江专业制作网站小程序
  • 食品网站网页设计内网网站开发报价
  • 网站项目团队介绍互联网网站文化
  • 如何联系网站管理员河源哪有做网站
  • 如何在网站上做评比软件开发外包合同模板
  • 龙岗网站建设定制开发有没有做长图的网站
  • 海纳企业网站建设模板群晖做网站服务器速度快吗
  • dw做的网站放文件夹一个人做网站赚钱
  • 如何自己做外贸网站桂林漓江官网
  • 怎么做电影流量网站吗厦门海沧建设局网站
  • 北京 网站建设合肥网站优化选哪家
  • 淘宝上买的建设网站能退款吗中国建设建筑教育网站
  • 知名网站设计服务商网站制作的公司哪家效果好
  • 电商平台建站赣州章贡区景点
  • 教学系统设计 网站开发现在流行做网站吗
  • 大连网站建设策划网站建设 广州网站建设专业公司
  • 织梦cms小说网站采集为什么打开网址都是seo综合查询
  • 学校网站建设特色湖北田源建设工程有限公司网站
  • 免费注册域名网站推荐怎么看网站用哪个系统做的
  • 怎样做ppt建网站淄博网站推广
  • 淄博网站建设-中国互联怎么进入外网
  • 金华高端网站设计网站备案号查电话号码
  • 为新创业公司建设网站企业网站能个人备案吗
  • 可做推广的网站封面设计网站
  • iis7 网站权限重庆找工作哪个网站好
  • 化妆品网站程序保定建设银行网站首页
  • 建设项目环保验收平台网站网页制作论文3000字