获取屏幕DPI的正确方法

LINUX gdk/X11正确获取DPI/Resolution的函数 错误算法   试图想自己计算的肯定不对,结果一直是96。典型的如下: GTK: GdkDisplay* display = gdk_display_get_default(); GdkScreen* screen = gdk_screen_get_default(); int width = gdk_screen_get_width( screen); int widthmm = gdk_screen_get_width_mm(screen); printf("wi 阅读详情

今天有学习屏幕自适配的相关知识,发现如下问题,使我困惑了,发出来和大家一起讨论下。

        public static String getDisplayMetrics(Context cx) {
            String str = "";
            DisplayMetrics dm = new DisplayMetrics();
            dm = cx.getApplicationContext().getResources().getDisplayMetrics();
            int screenWidth = dm.widthPixels;
            int screenHeight = dm.heightPixels;
            float density = dm.density;
            float scaledDensity = dm.scaledDensity;
            int densityDpi = dm.densityDpi;
            float xdpi = dm.xdpi;
            float ydpi = dm.ydpi;
            str += "he absolute width of the display in pixels: " + String.valueOf(screenWidth) + "\n";
            str += "The absolute height of the display in pixels: " + String.valueOf(screenHeight)
                            + "\n";
            str += "The logical density of the display: " + String.valueOf(density)
                            + "\n";
            str += "A scaling factor for fonts displayed on the display: " + String.valueOf(scaledDensity)
                                            + "\n";
            str += "The screen density expressed as dots-per-inch: " + String.valueOf(densityDpi)
                                            + "\n";
            str += "The exact physical pixels per inch of the screen in the X dimension: " + String.valueOf(xdpi) + "\n";
            str += "The exact physical pixels per inch of the screen in the Y dimension: " + String.valueOf(ydpi) + "\n";
            return str;
        }

在不同模器下执行的效果如下:



320*480的屏幕 hw.lcd.density=80

此种情况的疑问如下:density = 0.75 (这里不应该是80/160=0.5才对吗?)
scaledDensity = 0.75(同上)
densityDpi = 120(明明hw.lcd.density=80为何这里是120)
xdpi = 120(同上)
ydpi = 120(同上)




320*480的屏幕 hw.lcd.density=240

这种情况下正常,是我可以理解的结果。



320*480的屏幕 hw.lcd.density=320

此种情况的疑问如下:density = 1.5 (这里不应该是320/160=2才对吗?)
scaledDensity = 1.5(同上)
densityDpi = 240(明明hw.lcd.density=320为何这里是240)
xdpi = 240(同上)
ydpi = 240(同上)





480*800的屏幕 hw.lcd.density=240


此种情况的疑问如下:density = 1 (这里不应该是240/160=1.5才对吗?)
scaledDensity = 1(同上)
densityDpi = 160(明明hw.lcd.density=240为何这里是160)
xdpi = 164.75(同上)
ydpi = 165.20(同上)


以上是我的不理。不知道大家是如何理解的。。。


弄明白了,应该是模拟器的问题。如果一次启动多个模拟器,数据会串掉。
所以最好一次启动一个模拟器。


注解:density = getResources().getDisplayMetrics().density

这个值在不同密度的设备中返回不同的值:

160dpi:1

240dpi: 1.5

120dpi: 0.75

….类推


转自:http://www.eoeandroid.com/thread-17947-1-1.html

从“氛围编程“到“智能体工程“:AI编程范式的认知跃迁与工程实践 摘要: 2026年,ClaudeCode负责人鲍里斯·切尔尼提出用“智能体工程”(Agent Engineering)替代流行的“氛围编程”(Vibe Coding),认为后者过于主观,无法体现AI编程的系统化与工程化本质。智能体工程强调记忆系统、工具编排、任务分解、可观测性等核心技术,将AI编程从“玄学辅助”升级为可度量、可规模化的工程学科。本文通过对比术语差异、构建知识体系,并结合代码实例(如带记忆系统的代码生成Agent和可观测性系统),展示了智能体工程的实际应用。行业案例(如ClaudeCode的并 阅读详情

相关推荐

Bev算法在J5平台的部署

支持多种形式的Bev算法:ipmlss时序,以及基于transformer的gkt。

@bangbang的博客 807

屏幕适配的笔记

1.density工具类开发中常用到的 package com.example.test_android; import android.content.Context; public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位 转成为 px(像素) */ public static int dip2px(

JAVA之道 780

电子功用-微机电系统薄片及其制备方法

行业资料-电子功用-微机电系统薄片及其制备方法

Android笔记之屏幕分辨率

DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int widthPixels = dm.widthPixels; // 屏幕宽 int heightPixels = dm.heightPixels; // 屏幕float density = dm.d

问道 742

Android屏幕密度的深刻理解

Android中有一个类:DisplayMetrics,官方文档在此:https://developer.android.google.cn/reference/android/util/DisplayMetrics?hl=en DisplayMetrics类描述有关显示器的一般信息的结构,例如其大小,密度和字体缩放。 DisplayMetrics实例对象的获取方式:context.getResources().getDisplayMetrics(); 属性并不多,对于屏幕密度官方描述不够详细,所以这里记录

Android菜鸟的专栏 9603

常量工具类:获取屏幕宽度,密度,将密度转为像素

常量工具类:获取屏幕宽度,密度,将密度转为像素

dreamlivemeng的博客 505

android中使用DisplayMetrics获取屏幕参数

--关于Density int android.graphics.Bitmap.getDensity(),返回bitmap-density(密度)。默认的density就是当前display-density,除非当前应用程序不支持不同的screen-density。 在android.util.DisplayMetrics类中定义了一些变量和常量。 --常量DENSITY_XXX, int...

weixin_34261739的博客 645

java获取系统dpi_如何在java中获取屏幕DPI

我正在开发一个应用程序为我所需要的屏幕DPI。我查了几个论坛,并得到一个代码片段肚里如下:如何在java中获取屏幕DPI?Dimension screen = java.awt.Toolkit.getDefaultToolkit().getScreenSize();System.out.println("screen width: "+screen.getWidth());System.out.p...

weixin_39783360的博客 492

Android屏幕分辨率、密度的正确获取

1、dpi的概念,直接上图了。 2、dpi和ppi其实原理是相同的,都是每英寸上的点数,对于手机屏幕来说,这两个概念已经是同义词了。 3、dp和px的换算公式: px=dp*(dpi/160) 4、正确获取手机屏幕的分辨率和密度 DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDis...

移动编程 113

Android 获取屏幕高度和宽度的方法

我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即可获取屏幕的尺寸。 在一个Activity的onCreate方法中,写入如下代码: DisplayMetrics metri...

christma1981的博客 131

c语言安卓获取屏幕分辨率,Android屏幕分辨率、密度的正确获取

Android屏幕分辨率、密度的正确获取1、dpi的概念,直接上图了。2、dpi和ppi其实原理是相同的,都是每英寸上的点数,对于手机屏幕来说,这两个概念已经是同义词了。3、dp和px的换算公式:px=dp*(dpi/160)4、正确获取手机屏幕的分辨率和密度DisplayMetrics dm = new DisplayMetrics();getWindowManager().getDefault...

weixin_42334285的博客 890

winform根据不同屏幕分辨率(DPI) ,调整界面尺寸

/// <summary> /// 根据屏幕缩放情况,将尺寸转换成适合屏幕缩放的合适大小 /// 可以解决win7系统 125%缩放情况下显示不全的问题 /// </summary> /// <param name="value">原始尺寸</param> /// <returns>转换后的尺寸</returns> public static...

DHZYKN 3893

C# 获取当前屏幕的宽高和位置

C# 获取当前屏幕的宽高和位置 原文:C# 获取当前屏幕的宽高和位置上一篇博客《C# 获取当前屏幕DPI》,介绍了如何获取当前屏幕DPI设置 本章主要介绍如何获取当前窗口所在屏幕的信息 当前屏幕信息 如果当前是单屏幕,可以直接获取屏幕 var primaryScreen = Screen.PrimaryScreen; ...

weixin_30677475的博客 231

DPI的坑

win10下有一个坑爹的“每屏高DPI支持”开关需要开启,对于C#来说需要加一个app.manifest来开启。 https://github.com/Microsoft/WPF-Samples/tree/master/PerMonitorDPI 对于C++ 则需要右键属性–清单工具–输入和输出–DPI识别功能,改成“每个监视器高DPI识别” 以上是对于EXE来说的,如果应用是编成DLL给其他应用...

genyez的博客 1051

Android之长度单位px,dip,sp,dpi

Android之长度单位px,dip,sp,dpi 1.关于四个单位的介绍 1.px---------像素(pixel) 比如我们的手机的分辨率是1080*2340像素,也就代表着我们的手机宽有1080个像素点,即1080像素,高有2340个像素点 2.dip(dp)-------密度无关像素(Density independent pixel) dip就是我们在程序中应用的dp,在每英寸160px的显示器上,1dp = 1px 3.dpi-----------像素密度(Dots per Inch) 这个单

Demon_T的博客 1352

android获取屏幕密度(density)不准确 getApplicationContext().getResources().getDisplayMetrics()

有时候需要获得屏幕密度。一开始使用如下方式,获得屏幕密度总是不准确,实际160,使用下面的这种方式后densityDpi变成了480 context.getApplicationContext().getResources().getDisplayMetrics(); 后来换成另一种方式,完美解决 DisplayMetrics systemDM = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(sys

pbx6666的博客 2081

Android修改context.getResources().getDisplayMetrics()对应多分辨率风险点

通过修改DisplayMetrics的值,可能会导致应用程序的布局发生变化,从而影响到应用程序的用户体验。的值来适配不同分辨率的设备,但是需要注意风险点,确保修改后的应用程序在各种设备上都能够正常运行,并尽量避免对系统默认的DisplayMetrics进行修改。通过修改DisplayMetrics的值,可能会导致应用程序的性能问题。的值来适配不同分辨率的设备,但是这种做法并不推荐修改系统默认的DisplayMetrics,因为这可能会影响到整个应用程序的显示效果,并且可能会影响到其他应用程序的显示效果。

lixintyw的博客 969

Android应用开发(30)屏幕分辨率

本章介绍Android应用开发中回去分辨率的方法屏幕尺寸的计算方法

zsyf33078的专栏 1445

Android的小知识点(随时增加)

# getResources().getDisplayMetrics().density //获得相对密度(0.75,1.0.1.5等)

烧烤的技术博客水文集合 773

安卓屏幕适配

https://www.jianshu.com/p/4254ea9d1b27 private static float appDensity; private static float appScaledDensity; private static DisplayMetrics appDisplayMetrics; private static int barHeight; public ...

点滴之路的博客 231

Android屏幕适配很麻烦吗?不!太简单了。。。(持续更新)

转载请作明出处:juejin.im/post/5b3094… 前言 作为一个Android开发人员,你还在为了适配各种尺寸的屏幕而苦恼吗?你还在为了出现一个新的机型而修改着数不尽的dimens和layout吗?你还在为了UI给的奇葩尺寸的设计图而绞尽奶汁计算距离吗?如果你为了这些事情而苦恼,那么看完这篇文章,希望可以帮你减少开发时间,减缓生命的流逝速度。。。 不知道大家有没有看过前一段时间今日头...

weixin_34227447的博客 2043
上一篇: Android 获取设备的物理尺寸
下一篇: 深入Android 【一】 —— 序及开篇
frdde
博客等级 码龄15年 15粉丝 5原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值