博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android动态设置控件长宽比的几种常见方法
阅读量:5872 次
发布时间:2019-06-19

本文共 973 字,大约阅读时间需要 3 分钟。

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

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

例如现在想把某个图片设置成宽度和屏幕宽度一样,长度是宽度的一半

假设img所处布局为LinearLayout

ImageView img = //smthint 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 = //smthint width = img.getWidth()

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

参考资料

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

ImageView img = //smthimg.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中的代码段延迟到测量结束后才运行。

转载地址:http://sqhnx.baihongyu.com/

你可能感兴趣的文章
归并排序
查看>>
创建XML文件以及XML中的节点和更新Xml文件中的节点的值
查看>>
字节流转换为对象的方法
查看>>
使用临时表关联数据时效率低的问题
查看>>
Spring @AspectJ 实现AOP 入门例子(转)
查看>>
hdu 2255 奔小康赚大钱 KM算法
查看>>
bzoj 2752 9.20考试第三题 高速公路(road)题解
查看>>
通过一个模拟程序让你明白ASP.NET MVC是如何运行的
查看>>
BZOJ 1051 受欢迎的牛 缩点
查看>>
配置JAVA的环境变量
查看>>
好爸爸陪宝宝必做的50件小事儿
查看>>
服务器端跳转
查看>>
让低版本浏览器支持html5的标签
查看>>
hdu 6040 -Hints of sd0061(STL)
查看>>
【原创】cocos2d-x3.9蓝牙开发之蓝牙开启
查看>>
java面试题07
查看>>
Ideal 使用帮助手册
查看>>
C#核编之格式化编程
查看>>
C# 算法之链表、双向链表以及正向反向遍历实现
查看>>
css Flex布局(一)
查看>>