Android getWidth和getMeasuredWidth的正解

计数译码驱动显示电路实验报告_京东方G0A电路、阵列基板、显示 装置及驱动方法广州威彩... 图1、实施例二所述的选择子单元的结构示意图图2、实施例四所述的GOA电路结构示意图图3、实施例七所述的阵列基板的局部结构示意图图4、实施例所述的极性反转驱动方法的第一场的各信号时序图图5、实施例所述的极性反转驱动方法的第二场的各信号时序图图6、实施例所述的极性反转驱动方法的第三场的各信号时序图图7、实施例所述的极性反转驱动方法的第四场的各信号时序图图8、为图4所示时序下,实施例八所述显示... 阅读详情


转自:http://blog.youkuaiyun.com/wotoumingzxy/article/details/7760935#comments



原文摘自: http://gundumw100.iteye.com/blog/1025191

解释一下 之所以用翻译是因为我自己觉得看着繁体字可难受。。为了不让大家难受。。就翻译了。。哈哈

一、 也许很多同学对getWidth()和getMeasuredWidth()的用法有很多的不解,这两者之间有什么样的不同呢,网上也有各种不同的版本,但大多都大同小异罢了,从这个地方CTRL + C 到另一个地方CTRL + V, 没有把问题说透,也有一部分文章误导了大家对这两个方法的认识,我也是深受其害。这里先纠正下面的一个版本,Baidu上一搜一大堆的,可惜这种说法是错的,所以希望大家就不要再盲目的转载到你的空间里:

getWidth 得到的事某个View的实际尺寸。

getMeasuredWidth 得到的是某个View想要在parent view里面占的大小

相比你也见过这样的解释,听起来这样的解释也是云里雾里,没有把问题点透。

二、好了,错误的版本不多说了,下面对这两个方法做一下正解,首先大家应先知道一下几点:

1. 在一个类初始化时,即在构造函数当中我们是得不到View的实际大小的。感兴趣的朋友可以试一下,getWidth()和getMeasuredWidth()得到的结果都是0.但是我们可以从onDraw()方法里面的到控件的大小。

2.这两个所得到的结果的单位是像素即pixel。

  对这两个方法做介绍:

  getWidth(): 得到的是view在父Layout中布局好后的宽度值,如果没有父布局,那么默认的父布局就是真个屏幕。也许不好理解通过一个例子来说明一下:

[java]  view plain copy print ?
  1. public class Test extends Activity {  
  2.  private LinearLayout mBackgroundLayout;  
  3.  private TextViewTest mTextViewTest;  
  4.   
  5.  /** Called when the activity is first created. */  
  6.  @Override  
  7.  public void onCreate(Bundle savedInstanceState) {  
  8.   super.onCreate(savedInstanceState);  
  9.   
  10.   mBackgroundLayout = new MyLayout(this);  
  11.   mBackgroundLayout.setLayoutParams(new LinearLayout.LayoutParams(  
  12.     LinearLayout.LayoutParams.FILL_PARENT,  
  13.     LinearLayout.LayoutParams.FILL_PARENT));  
  14.   
  15.   mTextViewTest = new TextViewTest(this);  
  16.   
  17.   mBackgroundLayout.addView(mTextViewTest);  
  18.   setContentView(mBackgroundLayout);  
  19.  }  
  20.  public class MyLayout extends LinearLayout{  
  21.   
  22.   public MyLayout(Context context) {  
  23.    super(context);  
  24.    // TODO Auto-generated constructor stub  
  25.   }  
  26.   
  27.   @Override  
  28.   protected void onLayout(boolean changed, int l, int t, int r, int b) {  
  29.    // TODO Auto-generated method stub  
  30.    super.onLayout(changed, l, t, r, b);  
  31.    Log.i("Tag", "--------------");  
  32.    View mView=getChildAt(0);  
  33.    mView.measure(0, 0);  
  34.   }  
  35.     
  36.  }  
  37.  public class TextViewTest extends TextView {  
  38.   public TextViewTest(Context context) {  
  39.    super(context);  
  40.    // TODO Auto-generated constructor stub  
  41.    setText("test test ");  
  42.   }  
  43.     
  44.   @Override  
  45.    protected void onDraw(Canvas canvas) {  
  46.    // TODO Auto-generated method stub  
  47.    super.onDraw(canvas);  
  48.    // measure(0, 0);  
  49.    Log.i("Tag", "width: " + getWidth() + ",height: " + getHeight());  
  50.    Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()  
  51.      + ",MeasuredHeight: " + getMeasuredHeight());  
  52.    }  
  53.   
  54.  }  
  55. }  

这里是在LinearLayout里添加的一个TextView控件,如果此时要得到对TextView获得getWidth(),那么是在TextView添加到Layout后再去获取值,并不单单的是对TextView本身宽度的获取。

getMeasuredWidth():先看一下API里面是怎么说的。
The width of this view as measured in the most recent call to measure(). This should be used during measurement and layout calculations only.

得到的是最近一次调用measure()方法测量后得到的是View的宽度,它仅仅用在测量和Layout的计算中。

所以此方法得到的是View的内容占据的实际宽度。

你如果想从一个简单的例子中得到他们的不同,下面将对上面的例子做一下修改。

[java]  view plain copy print ?
  1. public class Test extends Activity {  
  2.  private TextViewTest mTextViewTest;  
  3.   
  4.  /** Called when the activity is first created. */  
  5.  @Override  
  6.  public void onCreate(Bundle savedInstanceState) {  
  7.   super.onCreate(savedInstanceState);  
  8.   mTextViewTest = new TextViewTest(this);  
  9.   setContentView(mTextViewTest);  
  10.  }  
  11.   
  12.  public class TextViewTest extends TextView {  
  13.   public TextViewTest(Context context) {  
  14.    super(context);  
  15.    // TODO Auto-generated constructor stub  
  16.    setText("test test ");  
  17.   }  
  18.   
  19.   @Override  
  20.   protected void onDraw(Canvas canvas) {  
  21.    // TODO Auto-generated method stub  
  22.    super.onDraw(canvas);  
  23.    measure(0, 0);  
  24.    Log.i("Tag", "width: " + getWidth() + ",height: " + getHeight());  
  25.    Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()  
  26.      + ",MeasuredHeight: " + getMeasuredHeight());  
  27.   }  
  28.  }  
  29. }  

总结(正解):

getWidth(): View在设定好布局后整个View的宽度。

getMeasuredWidth(): 对View上的内容进行测量后得到的View内容占据的宽度,前提是你必须在父布局的onLayout()方法或者此View的onDraw()方法里调用measure(0,0);(measure中的参数的值你自己可以定义),否则你得到的结果和getWidth()得到的结果是一样的。


Simulink中搭建一个包含PID控制的压电陶瓷快反镜模型 这个模型只是一个基本框架,你需要根据实际的系统参数和要求进行调整和优化。希望这些步骤能帮助你在Simulink中搭建所需的模型。 阅读详情

相关推荐

深入解析DDR5 RFM机制:从JESD79-5标准到硬件实现

本文深入解析了DDR5内存标准中的关键机制——RFM(Refresh Management)。文章从JESD79-5标准出发,详细阐述了RFM如何通过RAA计数器实现从被动定时到主动响应的智能刷新管理,并探讨了其硬件实现细节、命令调度挑战及系统级设计考量,为芯片设计工程师优化DDR5内存子系统性能与可靠性提供了实践指导。

fff88的博客 490

getWidth和getMeasuredWidth在何时可以得到正确数值

getMeasuredWidth在源码中的解释如下: /** * Like {@link #getMeasuredWidthAndState()}, but only returns the * raw width component (that is the result is masked by * {@link #MEASURED_SIZE_MASK}). * * @return

cys1991的专栏 1412

数据包络分析(超效率-SBM模型)附python代码

超效率-SBM模型超效率SBMpython代码(部分) 这段时间差不多忙完了,终于有时间可以来经营我的博客了。 上阵子挺多人私信我,原谅我记性不好,可能没有回复全。 这篇文章是超效率的扩展。 超效率SBM SBM本身就是非径向模型(non-radial model),想要了解径向超效率的请自行去前面翻阅。 上篇文章说到super-SBM的一个模型,公式为: 这个模型是分式模型,我们可以通过charnes cooper变换,将其转变成为: python代码(部分) 在编程过程中,本来我以为第一个模型是无

weixin_43217288的博客 3万+

android获取textview换行后高度不准确问题

网上的加以修改import android.content.Context; import android.text.Layout; import android.util.AttributeSet; import android.widget.LinearLayout; import android.widget.TextView; /** * Created by Administrato...

虫逗蚊子的博客 3316

奥比中光Dabai深度相机SDK在Ubuntu22.04的兼容性安装指南

本文详细指导如何在Ubuntu22.04系统上安装奥比中光Dabai深度相机的SDK。针对新旧版本不兼容的核心问题,重点推荐使用经过验证的v1.10.18版本SDK,并提供了从系统依赖检查、SDK下载安装、Python环境配置到编译测试的完整步骤,帮助用户成功解决安装难题并实现相机驱动。

j2k3l4的博客 1000

envi5.3处理高分二号影像数据详细过程记录

全文根据此篇文章进行数据处理: tm影像辐射定标_高分二号影像数据预处理及裁剪过程 其他参考: 学习笔记---遥感影像辐射定标与大气校正 利用ENVI自带全球DEM数据计算区域平均高程 高分二号数据处理流程(有高分二号的数据信息) GF2有多光谱和全色两个数据,MSS是多光谱的,PAN是全色的,多光谱的分辨率低,全色的高,需要把这两个数据融合,融合之前需要做定标等处理,获取经纬度。 一、多光谱影像处理 1. 辐射定标 以这个为例: 其他路径\2022.4.2...

ligous的博客 5万+

Android开发之getMeasuredWidth和getWidth区别从源码分析

转载自:http://blog.csdn.net/dmk877/article/details/49734869 我相信很多人对getMeasuredWidth和getWidth方法(getMeasuredHeight和getHeight类似这里仅以getMeasuredWidth和getWidth为例)都有过疑惑,并且网上去查阅资料看后也似懂非懂感觉,甚至有网上的讲解是错的,看到这肯定有很多人会说有哪些是错的?你凭什么说别人是错的?凭什么让我们相信你说的是对的?对于这个问题,由于我刚开始查阅..

az44yao的专栏 1631

MCP详解:手把手教你理解和如何使用各种开源MCP服务

MCP 作为一种开放协议,为 AI 模型与外部世界的连接提供了标准化的解决方案。它不仅降低了开发门槛,还极大地扩展了 AI 应用的边界。无论是开发者还是普通用户,都可以通过 MCP 更高效地利用 AI 技术,实现更多智能化的功能。

王哥儿聊AI的博客 6056

Android自定义View:getWidth()、getMeasuredWidth()获取宽高有什么区别?

通过源码解析,带你知道通过getWidth() 与 getMeasuredWidth() 获取宽高的区别

Carson带你学Android 5878

是德频谱分析仪相位噪声测量实战指南:从原理到精准操作

本文详细介绍了是德频谱分析仪在相位噪声测量中的实战操作指南,从基础概念到高级技巧全面解析。通过5G基站时钟测量等实际案例,展示如何利用是德N9030B等设备精准测量相位噪声,并分享设备预热、参数设置、环境干扰排除等关键操作要点,帮助工程师提升测量精度和效率。

jenkins8butler的博客 229

matlab SAR图像的多视滤波

单视复数数据(Single Look Comple)是原始的最高分辨率数据,但是从单个像元散射的雷达回波信号的相干叠加,导致强度信息有很多噪声。SAR的多视处理是对SLC数据方位向和/或距离向做平均,得到的结果是多视后的强度数据。多视处理可以提高SAR图像的信噪比,有效抑制斑点噪声,但是会降低方位分辨率。

点云侠的博客 534

Android getWidth和getMeasuredWidth的正解+layout_weigth使用正解

转自http://hi.baidu.com/ljlkings/home 一。也许很多童鞋对getWidth()和getMeasuredWidth()的用法:getWidth得到是某个view的实际尺寸. getMeasuredWidth是得到某view想要在parent view里面占的大小                       二。 1.在一个类初始化时,即在构造函

LilySea2012的专栏 1767

【TIDB】TiDB认证考试PTCA 练习题 题库

TiDB认证考试PTCA 练习题 题库

DBA之路的博客 4720

android+geturl+方法,Android getWidth和getMeasuredWidth的正解

一、也许很多童鞋对getWidth()和 getMeasuredWidth()的用法有很多的不解,这两者之间有什麼样的不同呢,网上也有各种不同的版本,但大多数都大同小异,从这个地方 Ctrl+C,到另一个地方Ctrl+V,没有把问题说透,也有一部分文章误导了大家对这两个方法的认识,我也是深受其害。这裡先纠正下面的一个版本的说 法,Baidu上一搜一大堆的,可惜这种说法是错的,所以希望大家就不要再盲...

weixin_42519161的博客 224

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: dip, dp, px, sp区别
下一篇: android tabwidget 调整高度文字居中
wangbofei
博客等级 码龄24年 33粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值