android view getwidth 0,Android中View.getWidth()和View.getMeasuredWidth()的区别

一。也許很多童鞋對getWidth()和getMeasuredWidth()的用法有很多的不解,這兩者之間有什麼樣的不同呢,網上也有各種不同的版本,但大多數都大同小異,從這個地方Ctrl+C,到另一個地方Ctrl+V,沒有把問題說透,也有一部分文章誤導了大家對這兩個方法的認識,我也是深受其害。這裡先糾正下面的一個版本的說法,Baidu上一搜一大堆的,可惜這種說法是錯的,所以希望大家就不要再盲目的轉載到你的空間裡:

getWidth得到是某个view的实际尺寸.

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

想必你也見過這樣的解釋,聽起來這樣的解釋也似雲裡霧裡,沒有把問題點透。

二。好了,錯誤的版本就不過多說了,下面對這兩個方法做一下正解,首先大家應先知道以下幾點:

1.

在一個類初始化時,即在構造函數當中我們是得不到View的實際大小的。感興趣的朋友可以試一下,getWidth()和getMeasuredWidth()得到的結果都是0.但是我們可以從onDraw()方法裡面得到控件的大小。

2. 這兩個方法所得到的結果的單位是像素即pixel.

對兩個方法做介紹:

getWidth():得到的是view在父Layout中佈局好後的寬度值,如果沒有父佈局,那麼默認的父佈局是整個屏幕。也許不好理解。通過一個例子來說明一下。

例1 :

public class Test extends Activity {

private LinearLayout mBackgroundLayout;

private TextViewTest mTextViewTest;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mBackgroundLayout = new MyLayout(this);

mBackgroundLayout.setLayoutParams(new

LinearLayout.LayoutParams(

LinearLayout.LayoutParams.FILL_PARENT,

LinearLayout.LayoutParams.FILL_PARENT));

mTextViewTest = new TextViewTest(this);

mBackgroundLayout.addView(mTextViewTest);

setContentView(mBackgroundLayout);

}

public class MyLayout extends LinearLayout{

public MyLayout(Context context) {

super(context);

// TODO Auto-generated constructor stub

}

@Override

protected void onLayout(boolean changed, int l, int t, int r, int

b) {

// TODO Auto-generated method stub

super.onLayout(changed, l, t, r, b);

Log.i("Tag", "--------------");

View mView=getChildAt(0);

mView.measure(0, 0);

}

}

public class TextViewTest extends TextView {

public TextViewTest(Context context) {

super(context);

// TODO Auto-generated constructor stub

setText("test test ");

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

// measure(0, 0);

Log.i("Tag", "width: " + getWidth() + ",height: " +

getHeight());

Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()

+ ",MeasuredHeight: " + getMeasuredHeight());

}

}

}

這裡是在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的內容佔據的實際寬度。

你如果想從一個最簡單的例子中的到它們的不同,下面將對上面的例子做一下修改:

public class Test extends Activity {

private TextViewTest mTextViewTest;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

mTextViewTest = new TextViewTest(this);

setContentView(mTextViewTest);

}

public class TextViewTest extends TextView {

public TextViewTest(Context context) {

super(context);

// TODO Auto-generated constructor stub

setText("test test ");

}

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

measure(0, 0);

Log.i("Tag", "width: " + getWidth() + ",height: " +

getHeight());

Log.i("Tag", "MeasuredWidth: " + getMeasuredWidth()

+ ",MeasuredHeight: " + getMeasuredHeight());

}

}

}

總結(正解):

getWidth(): View在設定好佈局後整個View的寬度。

getMeasuredWidth():

對View上的內容進行測量後得到的View內容佔據的寬度,前提是你必須在父佈局的onLayout()方法或者此View的onDraw()方法裡調用measure(0,0);(measure

參數的值你可以自己定義),否則你得到的結果和getWidth()得到的結果一樣。也許我組織的不是很好,大家有什麼不清楚的地方再給我留言。關於這兩個方法的區別就是看你有沒有用measure()方法,當然measure()的位置也是很重要的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/360044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信利用PHP创建自定义菜单的方法

在使用通用接口前,你需要做以下两步工作:1.拥有一个微信公众账号,并获取到appid和appsecret(在公众平台申请内测资格,审核通过后可获得)2.通过获取凭证接口获取到access_token注意:access_token…

ChronicleMap –具有堆外内存的Java体系结构

我的上一篇文章是在几周前写的,在收到一些有效的反馈后,我想澄清几点,作为本文的序言。 “ 使用零垃圾创建数百万个对象 ”的主要收获应该是,使用Chronicle,在编写Java程序时,您不会“局限于”使用jvm分配…

HTML滚动条S默认最小值,css修改滚动条默认样式

html代码:这是内容111这里是内容222这里是内容333css代码:.inner{width: 265px;height: 400px;position: absolute;top: 33px;left: 13px;/*cursor: pointer;*/overflow:hidden;}.innerbox{overflow-x: hidden;overflow-y: auto;color: #000;font-size: .7rem;font-family: &qu…

下列不属于html5语义元素,HTML5 新的语义元素

HTML5 提供了新的语义元素来明确一个Web页面的不同部分:HTML5中新的语义元素HTML5 元素标签定义文档中的节(section、区段)。比如章节、页眉、页脚或文档中的其他部分。根据W3C HTML5文档: section 包含了一组内容及其标题。WWFThe World Wide Fund for Nature (WWF) is....HTM…

【Android Developers Training】 81. 解析XML数据

注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。 原文链接:http://developer.android.com/training/basics/network-ops/xml.html 可扩展…

java核心面试_不正确的核心Java面试答案

java核心面试总览 在Internet上,Java面试问题和答案从一个网站复制到另一个网站。 这可能意味着错误或过时的答案可能永远不会得到纠正。 这是一些不太正确或已经过时的问题和答案。 即是Java 5.0之前的版本。 每个提供的问题后都有两个部分。 斜体的第一部分指示…

outlook自动保存html,当创建一个新的HTML电子邮件时保持默认的Outlook格式

我想创建一个简单的脚本来创建一个HTML消息,并且我想保留尽可能多的默认值。当创建一个新的HTML电子邮件时保持默认的Outlook格式在我的情况下,当我使用Home创建一个新邮件->新邮件时,它总是会创建一个默认字体[Calibri 11],格…

干加个偏旁可以变成什么字_面试官:“干”字加一笔,变成什么字?回答王和午字不对...

随着大学生的增多,如今的求职者进入职场,想到一份心仪的工作,最让人头疼的就是面试,越来越多的企业都需要全能型的人才,从而在面试的时候不仅要考核专业知识,面试官还要费尽心思出各种各样的题来考验求职者…

Oracle研学-查询

学自B站黑马程序员 1.单表查询 //查询水表编号为 30408 的业主记录 select * from T_OWNERS where watermeter30408 //查询业主名称包含“刘”的业主记录 select * from t_owners where name like %刘% //查询业主名称包含“刘”的并且门牌号包含 5 的业主记录 select * from…

国际站html代码,国际站必须看得懂的HTML代码

国际站必须看得懂的HTML代码國産〇〇柒大家每天都忙着找关键词,忙着写标题,忙着做各种的优化。目的就是想把自己的产品排名到前面,获得更多的曝光,带来更多的询盘。在这个过程中我们是客服同事也是一名搜索优化人员,但…

phoengap–node+websocket在线聊天室

该实验项目基于: phonegapnodewebsocket可以应用于android 和 ios平台。 已经测试通过。以下是测试的图: 首先是用node 架设服务器。 基本上都node 基于websocket的。 主要是对message做处理和判断来进行输出和逻辑处理 而客户都,由于android…

中音萨克斯指法表图_萨克斯的几个特殊指法记忆和几个概念

大家在平常的练习和吹奏的时候,经常会出现找不到相应的指法的情况,有经验的萨友们通过长时间的摸索,会找到其中的一些规律。实际上,能看懂“一图在手,不用再担心找不到指法了”里面的表格,可以起到同样的作…

计算机网络结构示意图,计算机网络原理-计算机网络体系结构.pdf

绪论  计算机 网络概述一、计算机网络的发展过程截止 目前为止 ,计算机网络 已发展到第 四代 , 即出现了第四代计算机网,它们是:第一代 :面 向终端 的计算机 网络第二代 :分组交换计算机 网络 (包括国际标…

git配置和使用

1、注册bitbucket用户登录bitbucket站点https://bitbucket.org/注册一个用户,注册后用户名为linjiqin,邮箱为linjiqindkhs.com。 2、Create repository(仓库)登录bitbucket,点击“Create”按钮会出现一个Create a new repository页面&#xf…

操作系统饥饿现象_操作系统心得体会

一、操作系统1.基本概念操作系统简称OS,是配置在计算机硬件上的第一层软件,它能够有效的组织和管理计算机系统中的硬件和软件资源,合理的组织计算机工作流程,控制程序的执行,并向用户提供各种服务功能。OS是现代计算机…

组态王怎么做超级曲线_鸭肉怎么做?大叔教你红烧鸭块,香气扑鼻,简单易做,超级好吃...

晚餐总是要有硬菜上桌的,所谓硬菜无非是鸡鸭鱼肉,买只鸭子吧,倒也是不在乎哪天吃大荤,鸭子算是减肥食谱,对高血压,心脏病有一定的好处,另外,癌症病人不能吃鸡,鸭子却是可…

计算机应用能力考试ppt,计算机应用能力考试题库

计算机应用能力考试题库计算机应用能力考试在考试设计时,不能要求所有的应试人员考相同的内容,不同的应试人员应能根据自身的特点和需要选择适合自己的考试内容。以下是关于计算机应用能力考试题库,希望大家认真阅读!单选题1.PowerPoint2003的…

查询DB中每个表占用的空间大小

使用如下sql script可以获得每个数据库表所占用的空间大小,单位是KB create table #Data(name varchar(100),row varchar(100),reserved varchar(100),data varchar(100),index_size varchar(100),unused varchar(100)) declare name varchar(100) declare cur curs…

java高频面试_C ++或Java,高频交易哪个更快?

java高频面试总览 关于什么是高频交易的最佳解决方案,存在不同意见。 问题的一部分是高频交易的变化超出您的预期,另一部分是更快的含义。 我的看法 如果您有一个典型的Java程序员和一个典型的C 程序员,并且每个人都有几年编写典型的面向对…

mysql字段简索引_MySQL常用的一些语句,索引,字段等

1、库相关:建库:character set:指定编码COLLATE:排序规则 utf8mb4_general_ci 大小写不敏感CREATE DATABASE test_db default character set utf8mb4 COLLATE utf8mb4_general_ci;查看建库语句:SHOW CREATE DATABASE t…