最简单也最难——怎样获取到Android控件的高度「建议收藏」

最简单也最难——怎样获取到Android控件的高度

大家好,又见面了,我是全栈君。

问题

怎样获取一个控件的长和高。相信非常多朋友第一眼看见这个问题都会认为非常easy,直接在onCreate里面调用getWidth、getMeasuredWidth不就能够获得了吗,可是。事实上是并没有简单的,不信的话,你能够去试一下,在onCreate里面,你是无法获得长宽值的,始终为0。

原因

这是为什么呢,事实上熟悉view绘制流程的朋友应该一眼就看出来了。在onCreate中。我们的控件事实上还并没有画好,换句话说,等onCreate方法运行完了,我们定义的控件才会被度量(measure),所以我们在onCreate方法里面通过view.getHeight()获取控件的高度或者宽度肯定是0。

解决

No1:

int w = View.MeasureSpec.makeMeasureSpec(0,
				View.MeasureSpec.UNSPECIFIED);
		int h = View.MeasureSpec.makeMeasureSpec(0,
				View.MeasureSpec.UNSPECIFIED);
		imageView.measure(w, h);
		int height = imageView.getMeasuredHeight();
		int width = imageView.getMeasuredWidth();

这样的方法非常easy,就是我们自己来測量

No2:

ViewTreeObserver vto = imageView.getViewTreeObserver(); 
	    vto.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { 
	        public boolean onPreDraw() { 
	        	vto.removeOnPreDrawListener(this);
	            int height = imageView.getMeasuredHeight(); 
	            int width = imageView.getMeasuredWidth(); 
	            return true; 
	        } 
	    }); 

这种方法。我们须要注冊一个ViewTreeObserver的监听回调,这个监听回调,就是专门监听画图的,既然是监听画图,那么我们自然能够获取測量值了,同一时候。我们在每次监听前remove前一次的监听。避免反复监听。

No3:

ViewTreeObserver vto = imageView.getViewTreeObserver();   
		vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 
		    @Override   
		    public void onGlobalLayout() { 
		        imageView.getViewTreeObserver().removeGlobalOnLayoutListener(this); 
		        imageView.getHeight();
		        imageView.getWidth();
		    }   
		});   

这种方法于第2个方法基本同样,但他是全局的布局改变监听器,所以是最推荐使用的。

OK。如今看来,看似简单问题也不是那么简单吧。

以上。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115883.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SecureCRTPortable连不上64位的CentOS6.5

    SecureCRTPortable连不上64位的CentOS6.5最近在VMware上装64位的CentOS6.5,发现ifconfig之后没有eth0,刚开始以为virbr0的inetaddr的ip就网卡的ip,其实这是为连接其上的其他虚拟网卡提供DHCP服务,eth0的ip才是网卡的ip如下图直接用ifconfig命令是没有eth0的:要看到eth0里的ip,用dhclienteth0命令自动获取一下ip,接着用ifconfig|more或者if…

    2022年5月29日
    34
  • 罗技k375s键盘怎么连接_罗技k380键盘怎么连接手机

    罗技k375s键盘怎么连接_罗技k380键盘怎么连接手机罗技K375s无线蓝牙键盘使用总结(连接|手感)首先我们先来试试优联连接。优联只支持PC(废话)。如果之前没有配对过,需要再下个优联的软件来进行配对。不得不说,罗技的网站打开真慢,服务器估计在国外。而且中文主页,K375S竟然还没上架,列表里没有,也搜索不到。我用的是旧的优联,已经配对了M570。配对新设备之后,其实就连上了。要你输入一些字符确认。不过这里的K370S是怎么回事,这命名……既然…

    2022年10月15日
    3
  • python的遍历字符串的方式

    python的遍历字符串的方式1)直接进行遍历strs=’abcd’forchinstrs:print(ch)2)利用下标遍历strs=’abcd’forindex,chinenumerate(strs):print(index,end=”)print(ch)3)利用range进行遍历strs=’abcd’forindexin…

    2022年6月22日
    54
  • 快捷方式图标变白完美解决方法_应用程序图标显示空白

    快捷方式图标变白完美解决方法_应用程序图标显示空白annotation:explorer.exe是Windows程序管理器或者文件资源管理器,它用于管理Windows图形壳,包括桌面和文件管理,删除该程序会导致Windows图形界面无法使用解决方式:把图标缓存的数据库删除第一步:win+rcmd进入命令行第二步:一行一行键入如下命令taskkill/imexplorer.exe/fcd/d%u…

    2022年10月18日
    3
  • SpringCloud系列之API网关(Gateway)服务Zuul

    SpringCloud系列之API网关(Gateway)服务Zuul

    2020年11月19日
    182
  • 2021年各行业NPS基准分数一览[通俗易懂]

    2021年各行业NPS基准分数一览[通俗易懂]每每谈及NPS,总会有客户问我们:NPS分数达到多少才算得上好?这个问题没有统一的标准答案。因为NPS分数没有绝对的高低之分,不同行业之间标准不一。比如,根据TemkinGroup——知名的体验研究机构于2018年的调查,快餐行业的NPS均分是26,而医疗保健的NPS均分是19。因此,企业要想判断自己的NPS分数是好是坏,最需要了解的是所处行业的整体NPS水平。为了能够帮助大家快速了解自己在行业内的NPS地位,我们特别整理了分别处于ToB和ToC领域共14个行业的最新NPS基准分..

    2022年5月25日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号