广告
返回顶部
首页 > 资讯 > 移动开发 >详解Android应用中屏幕尺寸的获取及dp和px值的转换
  • 182
分享到

详解Android应用中屏幕尺寸的获取及dp和px值的转换

dppxAndroid 2022-06-06 08:06:49 182人浏览 八月长安
摘要

获取屏幕尺寸 通过WindowManager获取 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().g

获取屏幕尺寸

通过WindowManager获取


DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
//其中display = getWindowManager().getDefaultDisplay() 获得了一个DefaultDisplay对象; 然后 display.getMetrics(dm) 把屏幕尺寸信息赋值给DisplayMetrics dm
//注意:WindowManager有时候需要通过context。getSystemService获取:WindowManager wm = (WindowManager) context.getSystemService(context.WINDOW_SERVICE);

DisplayMetrics和Display的关系。;

Display指代显示区域这个对象,它可能是真实的物理屏幕,也可能仅指应用程序的显示区域,比如在非全屏Activity里,系统因为有状态栏,因此显示区域要比物理屏幕要小。DisplayMetrics里封装了显示区域的各种属性值。查看源码发现,在DisplayMetrics对各个属性值的注释都说明为真实的物理尺寸。而且也发现display.getMetrics(dm)这一函数基本在应用在获取真实屏幕尺寸的时候。记住这一点即好。

注:构造函数DisplayMetrics不需要传递任何参数;调用getWindowManager()之后,会取得现有Activity的Handle。然后,diplay将取得的宽高维度存放于DisplayMetrics对象中,而取得的宽高维度是以像素为单位(Pixel),“像素”所指的是“绝对像素”而非“相对像素”。

通过DisplayMetrics对象dm可以获得如下信息


width = dm.widthPixels;
height = dm.heightPixels;
xdpi = dm.xdpi;
ydpi = dm.ydpi;
density = dm.densityDpi;
fdensity = dm.density;

将dp和px转化成对应的px数值的实例:


int padding =4;
padding = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 4,
context.getResources().getDisplayMetrics());

解释:
padding的单位是:dip, padding的大小是:4

虽然是4dip,但是,不是最终padding的真实单位。

他是通过计算以后,4dp和密度系数相乘得到的一个值,实际上计算出来的padding单位是像素,也就是它的宽度。在不同dpi的屏幕上,这个值是不一样的。

即:将dp转化为px,返回的是一个dp对应的px数值。

如果这里是COMPLEX_UNIX_SP,就是讲sp转化为dp。

单位间的转换就用这个方法,可以将其封装成一个工具方法。

进一步理解:
applyDimension方法是将4像素转换为6dp(480x800)、4dp(320x800)、3Dp(240x320), 所以返回的值对应不同的分辨率(通过getDisplayMetrics就得到了)就是6、4、3

源代码:


public static float applyDimension(int unit, float value,
DisplayMetrics metrics)
{
switch (unit) {
case COMPLEX_UNIT_PX:
return value;
case COMPLEX_UNIT_DIP:
return value * metrics.density;
case COMPLEX_UNIT_SP:
return value * metrics.scaledDensity;
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.xdpi;
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
}
return 0;
}
您可能感兴趣的文章:Android 图片切换器(dp、sp、px) 的单位转换器基于Android中dp和px之间进行转换的实现代码android中px和dp,px和sp之间的转换方法


--结束END--

本文标题: 详解Android应用中屏幕尺寸的获取及dp和px值的转换

本文链接: https://www.lsjlt.com/news/25435.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作