资讯专栏INFORMATION COLUMN

Android动态设置控件长宽比的几种常见方法

tinylcy / 1982人阅读

摘要:我们在日常的开发中经常需要根据设备的大小来确定控件大小,或者根据控件已知的长宽设置其他控件长宽,这里记录几种常见的方法根据设备宽度和长度确定控件大小例如现在想把某个图片设置成宽度和屏幕宽度一样,长度是宽度的一半假设所处布局为根据控件已确定宽

我们在日常的开发中经常需要根据设备的大小来确定控件大小,或者根据控件已知的长宽设置其他控件长宽,这里记录几种常见的方法:

根据设备宽度和长度确定控件大小

例如现在想把某个图片设置成宽度和屏幕宽度一样,长度是宽度的一半
假设img所处布局为LinearLayout

ImageView img = //smth
int width = img.getContext().getResources().getDisplayMetrics().widthPixels;
int height = width * 0.5;
img.setLayoutParams(new LinearLayout.LayoutParams(width , height));
    
根据控件已确定宽度设置长度

现在看下面的布局



    

此处由于根布局的padding跟设备的大小其实是已知的,所以ImageView的宽度是设备的宽度减去padding的大小,但是实际使用中,如这时候想根据ImageView的实际宽度来设置高度,跟上面的例子一样,如果我能获取到width就好办了,但是经常会发现如果我们调用

ImageView img = //smth
int width = img.getWidth()

得到的width为0,是因为这个函数调用太早,img还没有测量长宽,所以得到的结果是0

参考资料 https://stackoverflow.com/questions/3591784/getwidth-and-getheight-of-view-returns-0/24035591#24035591

所以我们需要做的就是在img测量过后后再去获取width,查看了stackOverflow上的相关问题(上述参考资料链接),可以采用


ImageView img = //smth
img.post(new Runnable() {
        @Override
        public void run() {
            int width = img.getWidth();
            int height = width * 0.5;
            img.setLayoutParams(new LinearLayout.LayoutParams(width , height));
        }
    });
    

其中post方法的作用是,把传入的runnable中的代码段延迟到测量结束后才运行。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12790.html

相关文章

  • ImageView 使用详解

    极力推荐文章:欢迎收藏Android 干货分享 showImg(https://segmentfault.com/img/remote/1460000019975020); 阅读五分钟,每日十点,和您一起终身学习,这里是程序员Android 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 一、ImageView 的继承关系二、ImageView 常用方...

    shery 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    沈建明 评论0 收藏0
  • 金三银四,2019大厂Android高级工程师面试题整理

    摘要:原文地址游客前言金三银四,很多同学心里大概都准备着年后找工作或者跳槽。最近有很多同学都在交流群里求大厂面试题。 最近整理了一波面试题,包括安卓JAVA方面的,目前大厂还是以安卓源码,算法,以及数据结构为主,有一些中小型公司也会问到混合开发的知识,至于我为什么倾向于混合开发,我的一句话就是走上编程之路,将来你要学不仅仅是这些,丰富自己方能与世接轨,做好全栈的装备。 原文地址:游客kutd...

    tracymac7 评论0 收藏0
  • 原来这样就可以开发出一个百万量级的Android相机

    摘要:通过可以将和连接起来,当和连接后,获得的预览帧数据就可以通过显示在屏幕上了。预览帧数据传递给,实现预览图像的显示。这里预览帧数据对应的预览图像暂且称作相机预览图像。拍摄帧数据可以生成位图文件,最终保存成或者等格式的图片。欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许用户使...

    sorra 评论0 收藏0
  • 原来这样就可以开发出一个百万量级的Android相机

    摘要:通过可以将和连接起来,当和连接后,获得的预览帧数据就可以通过显示在屏幕上了。预览帧数据传递给,实现预览图像的显示。这里预览帧数据对应的预览图像暂且称作相机预览图像。拍摄帧数据可以生成位图文件,最终保存成或者等格式的图片。 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由QQ空间开发团队发表于云+社区专栏 最近我负责开发了一个跟Android相机有关的需求,新功能允许...

    darry 评论0 收藏0

发表评论

0条评论

tinylcy

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<