前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Activity中获取View的宽高

Activity中获取View的宽高

作者头像
AnRFDev
发布于 2021-02-01 07:15:12
发布于 2021-02-01 07:15:12
1.8K00
代码可运行
举报
文章被收录于专栏:AnRFDevAnRFDev
运行总次数:0
代码可运行

有些时候我们需要获取到View的宽高信息。在onCreate和onResume中尝试view.getWidth()或是view.getHeiht()时,我们会发现获取到的是0。 Activity视图在创建完成后,各个子view并不一定被加载完成。 获取宽高正确的方法有哪些呢?

方法1 - 在Activity的onWindowFocusChanged获取宽高

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    // 在这里我们可以获取到View的真实宽高
    Log.d(TAG, "onWindowFocusChanged: mBtn1.getWidth == " + mBtn1.getWidth());
}

方法2 - 使用ViewTreeObserver的OnGlobalLayoutListener回调

获取View的ViewTreeObserver,添加回调

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ViewTreeObserver vto = mBtn1.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        int height = mBtn1.getHeight();
        int width = mBtn1.getWidth();
        Log.d(TAG, "onGlobalLayout: mBtn1 " + width + ", " + height);
        mBtn1.getViewTreeObserver().removeOnGlobalLayoutListener(this);
    }
});

方法3 - 使用View.post(Runnable action)方法

例如我们在onCreate中post一个Runnable

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBtn1 = findViewById(R.id.btn1);
        Log.d(TAG, "mBtn1 post runnable");
        mBtn1.post(new Runnable() {
            @Override
            public void run() {
                Log.d(TAG, "mBtn1: " + mBtn1.getWidth() + ", " + mBtn1.getHeight());
            }
        });
    }

/* log
06-19 11:54:17.865 28009-28009/com.rustfisher.basic4 D/rustApp: mBtn1 post runnable
06-19 11:54:17.867 28009-28009/com.rustfisher.basic4 D/rustApp: [act2] onResume
06-19 11:54:17.899 28009-28009/com.rustfisher.basic4 D/rustApp: mBtn1: 355, 144
*/

可以获取到view的宽高。从log的时间上可以看出,在view加载完毕后,执行的Runnable。

应用 - 动态调整ImageView的宽高

获取到view的宽高后,我们可以动态地调整ImageView的高度。 假设图片宽高为704 * 440。xml中设置scaleType为fitXY。已知ImageView的宽度是固定的,我们可以调整高度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="fitXY"/>

根据图片真实大小来重设ImageView的高度。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    resetIntroIvParams();
}

private void resetIntroIvParams() {
    int height = mIntroIv.getHeight(); // 704 * 440
    int wid = mIntroIv.getWidth();
    if (height > 0 && wid > 0) {
        ViewGroup.LayoutParams layoutParams = mIntroIv.getLayoutParams();
        layoutParams.height = (int) (wid * 440.0 / 704.0);
        mIntroIv.setLayoutParams(layoutParams);
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
复盘Build 2016:不要错过微软给开发者的这些福利 | TW洞见
今日洞见 文章作者/配图来自ThoughtWorks:陈计节。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表。已经本网协议授权的媒体、网站,在使用时必须注明"内容来源:ThoughtWorks洞见",并指定原文链接,违者本网将依法追究责任。 近年来,微软坚持为社区提供更多灵活性,并以更开放的思路重构其已有平台,一改从前封闭高冷的姿态,迅速调整战略以适应新的产业格局,向全世界展示了一个灵动
ThoughtWorks
2018/04/20
7450
复盘Build 2016:不要错过微软给开发者的这些福利 | TW洞见
邹溪源: 我们为什么要搞长沙.NET技术社区(四)
昨天(2019年3月6日)晚餐时间,有幸得到长沙技术圈资深.NET开发者出生的企业家、湖南华邦互联有限公司董事长赵总的赞助,同时他也亲自从河东过来,对我们的社区建设提供支持和鼓励,让我们了解到我们未来可以奋斗的方向,也体会到自己的责任和不足,相信有了赵总以及以赵总为代表的长沙IT企业家们的大力支持,我们的社区将迎来新的发展契机。
寒树Office与RPA
2019/11/29
3920
焦虑的 BAT、不安的编程语言,揭秘程序员技术圈生存现状!
近日,Oracle 中国大规模裁员事件闹得沸沸扬扬,有人作比喻道“北京最大的一个养老院倒了”。虽然 Oracle 以业界良心的 N+6 补偿方案来赔偿,但是其内部的部分老员工依旧表达了不满,纷纷表示,“不理解公司为什么突然裁员,产品线上还在盈利。正常情况下,如果公司财报连续三年盈利,是不允许裁员的。”
AI科技大本营
2019/05/17
5980
邹琼俊:不是211,985毕业的他,为什么能够出版两本优秀的技术书?
邹琼俊,湘中小城娄底人,毕业于湖南省第一师范学校。大学毕业后,加入了周尹周老师组建的培训机构学习.NET培训,走上了.NET开发这条路。《ASP.NET企业级开发实战》一书作者。
寒树Office与RPA
2019/11/29
9920
邹溪源: 我们为什么要搞长沙.NET技术社区(一)
2019年2月17日,继深圳,广州,西安,成都,苏州相继成立了.NET社区之后,酝酿已久的长沙.NET社区也终于组织了第一次线下交流会。如果您是长沙的IT精英,扫码上图的二码,我带你加入长沙微软技术俱乐部大家庭,请你共商大计。
寒树Office与RPA
2019/11/29
5990
关于以“互联网+”为驱动 推进我国经济社会创新发展的建议
关于以“互联网+”为驱动   推进我国经济社会创新发展的建议 马化腾 全国人大代表、腾讯公司董事会主席兼首席执行官  “互联网+”是以互联网平台为基础,利用信息通信技术与各行业的跨界融合,推动产业转型升级,并不断创造出新产品、新业务与新模式,构建连接一切的新生态。   当前中国经济正处于转型升级的重要时期,面临增长放缓、生产过剩、外需不振等严峻挑战,“稳增长、促改革、调结构、惠民生”是当前经济社会发展的首要任务,创新驱动正在成为我国经济发展的新引擎。通过多年创新发展的中国互联网企业已跻身世
腾讯研究院
2018/03/09
1.4K0
文本大数据促进传媒产业融合,数据智慧触手可及,中国区块链技术尚处幼年生长期 | 大咖周语录
文本大数据促进传媒产业融合,数据智慧触手可及,中国区块链技术尚处幼年生长期 | 大咖周语录
数据猿
2018/04/19
6460
文本大数据促进传媒产业融合,数据智慧触手可及,中国区块链技术尚处幼年生长期 | 大咖周语录
从传统行业到互联网,为什么作为开发者的你总是会被坑来坑去?
高中以前,小A都是村里成绩最为优秀的,是隔壁邻居们口中的那个他。然而,由于高考失利,他最终不得不离开校园,托了远方表舅的关系来到某血汗工厂打工,而是他加入血汗工厂之后,才知道他的这位所谓远方表舅,还从介绍他进厂的过程中抽到了两千块钱的介绍费。
三哥
2019/03/19
5470
一篇“上床”文章引发的血案 我有话要说
昨天有网友说一场好好的发布会,被我一篇文章搞砸了,但T哥并无此意,我也是本着开放的心态来报道此事儿,并参与当天的媒体专访,现场我采访的问题也跟我的内容相关,但还是有很多人对此文产生了误解。 首先,我没有说致远与金蝶的合作就抛弃了用友 有网友反映,到底我们的客户未来姓用友还是金蝶,求客户的心理阴影影响面积,本次致远的合作仅是云表单的一块业务,并非致远的全部产品线。不知道这个阴影面积如何求得? 其次,协同生态任何事情都有可能发生 致远今天不跟金蝶合作,还会跟其他的银蝶合作,连华为都一直坚称自已是一能力有限的公
人称T客
2018/03/21
1.1K0
一篇“上床”文章引发的血案 我有话要说
最干货Android开发者成长指南
背景 今年4月,全球互联网引来了一个历史性转折点:根据流量分析工具 StatCounter 的报告,Android 首次超越 Windows,成为用户访问互联网最常用操作系统!Android 不仅在移动领域,在全操作系统内,都成为了当之无愧的霸主!无论你有志于成为领先企业的 Android 工程师,还是靠自己改变世界的独立开发者,现在都是进入这个领域的绝佳时机。 Android 技术如此受欢迎的另一个原因,也是因为其就业面非常广,无论是在当前的移动互联网,还是将来的物联网领域都有一席之地。
用户1907613
2018/07/20
4110
(深度好文)“互联网+”4字心法要诀:“柔、软、感、快”
2014年7月1日晚间,停牌中的湘鄂情对外公告称,公司名称由“北京湘鄂情集团股份有限公司”变更为“中科云网科技集团股份有限公司”。
IT阅读排行榜
2018/08/13
3730
(深度好文)“互联网+”4字心法要诀:“柔、软、感、快”
警惕数据霸权主义,由菜鸟和顺丰互“怼”引发的数据主权之争丨科技云·视角
虽然国家邮政局以强硬姿态要求菜鸟和顺丰恢复业务合作和数据传输,但这场因“小范围的快递柜对接问题”引发的“罗生门”事件,让腾讯、京东、美团、网易等互联网巨头一致站到了菜鸟的对立面,力挺顺丰并接入丰巢自提柜。在这场“数据争夺战”的背后,究竟掩藏着怎样的真相?
科技云报道
2022/04/14
8250
警惕数据霸权主义,由菜鸟和顺丰互“怼”引发的数据主权之争丨科技云·视角
互联网寒冬下那些 Android 开发高手,都在研究什么技术?
近半年来,很多人都问过我这样的问题。大家对于职业的未来,都有一些迷茫和焦虑,其实我也有,为什么会这样呢?
Android技术干货分享
2019/11/14
1K0
互联网寒冬下那些 Android 开发高手,都在研究什么技术?
平台战略,传统企业数字化转型关键(上)
平台模式已经深入人们的生活,出现在包括社交网络、电商、游戏、第三方支付等各种产业中,平台模式正在不断改变人们的生活模式,同时也在全球商业竞争中扮演着重要角色。
Fino_Jack
2020/05/24
6520
平台战略,传统企业数字化转型关键(上)
【工作感悟】Android 开发者,如何提升自己的职场竞争力?
今年的互联网,延续了去年的态势。虽然前些年,每到年底的时候大环境都不好,然而来年照样春暖花开。但是2018下半年的颓势,在2019年春天并未得到缓解,所以现在的互联网环境是真的不好了。
Android技术干货分享
2019/06/20
5410
前端学习路线与方法
在“开篇词”中,我和你简单回顾了前端行业的发展,到现在为止,前端工程师已经成为研发体系中的重要岗位之一。可是,与此相对的是,我发现极少或者几乎没有大学的计算机专业愿意开设前端课程,更没有系统性的教学方案出现。大部分前端工程师的知识,其实都是来自于实践和工作中零散的学习。
李才哥
2019/07/10
5270
一张图来看看.NETCore和前后端技术的演进之路
2019年3月10日,在长沙.NET 技术社区组织的技术沙龙《.NET Core和前后端分离那些事儿》上,我们曾经试图通过一系列抽丝剥茧的过程来引导大家在这条基于.NET Core的前后端分离有关的技术路线上持续发散,由于各种原因未能成功,因此,技术社区执行主席,李文强同学整理了一张图,并由溪源以专刊的形式来描述他所认为的技术演进之路。
心莱科技雪雁
2019/04/22
4920
一张图来看看.NETCore和前后端技术的演进之路
聊聊IT技术人的知识体系
我在我的2020年终总结中提到技术人需要建立自己的知识体系,那么怎么建立自己的知识体系呢?技术人的知识体系又是什么样的呢?今天,和你一一分享。
Edison Zhou
2021/03/11
6400
聊聊IT技术人的知识体系
全民编程时代,程序员该如何保住饭碗?
无论任何场景下程序员想要保证饭碗,就是要保证足够的市场竞争力,这个行业很大一个特点是加班延点比较多,很多年龄大的程序员在体力下降的情况下,加上家中事情比较多,给人一种年龄大的程序员市场竞争力下降的感觉,精力下降只是一种表面的现象,程序员的市场就是保持对新技术的跟进能力,这点跟不上即使是看着很年轻的程序员心态其实已经老了。
程序员互动联盟
2020/04/03
5090
江小涓:为什么互联网是+,数据要素是×呢?
第二十五届北大光华新年论坛在北京大学百周年纪念讲堂举行,本届论坛的主题为“增长动能 中国探索”。中国工业经济学会会长,中国社会科学院大学教授、博导,国务院原副秘书长江小涓出席论坛并发表题为《发挥数据要素积极作用 促进经济持续向好发展》的演讲。
小腾资讯君
2024/01/17
2010
江小涓:为什么互联网是+,数据要素是×呢?
推荐阅读
相关推荐
复盘Build 2016:不要错过微软给开发者的这些福利 | TW洞见
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档