如何获取设备的屏幕大小?
如何获取设备的屏幕大小?
我想要的Desire手机有480 x 800像素、3.7英寸的屏幕规格,而HD手机有480 x 800像素、4.3英寸的屏幕规格。\n我运行了这个帖子中被接受为答案的代码 How to get screen size of device?,但它是错误的。例如,对于3.7英寸的屏幕尺寸,返回的数值是2.4,这是非常错误的。\n有人知道如何获取真实的屏幕尺寸吗?我不需要分辨率,我需要屏幕的实际尺寸。\n注意:这段代码是错误的(至少对我来说不起作用)。\n
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; //给我320 int height = dm.heightPixels; //给我533
\n我有HTC Desire手机,我的分辨率是480 x 800像素,\n有人能告诉我如何获取真实的屏幕尺寸(英寸),以及设备的真实分辨率吗?
如何获取设备的屏幕尺寸?
在Android应用程序中,有时需要获取设备的屏幕尺寸。下面是一些关于如何获取设备屏幕尺寸的问题的原因和解决方法。
问题原因:
在Android开发中,默认情况下,系统会对应用程序的资源进行预缩放,以适应不同屏幕密度的设备。这可能导致在获取屏幕尺寸时出现问题,因为返回的结果可能不是实际的物理屏幕尺寸。因此,需要对应用程序进行设置,以禁用预缩放并确保获取的屏幕尺寸是准确的。
解决方法:
要禁用预缩放并获取设备的实际屏幕尺寸,需要在Android清单文件中添加一行代码:<supports-screens android:anyDensity="true" />
。将此行代码添加到清单文件的合适位置即可。请注意,实际上应将其设置为"false",而不是"true",以禁用预缩放。因为"anyDensity"属性的默认值已经是"true"。这样设置后,就可以获取到实际的屏幕尺寸。
参考链接:
- Android官方文档:developer.android.com/guide/topics/manifest/…
- Android官方文档指出,除非你确切知道需要设置为"false",否则不要将其设置为"false",因为这可能会影响应用程序的正常工作。参考链接:developer.android.com/guide/topics/manifest/…
问题的原因是因为在禁用预缩放的情况下,getWidth()
和getHeight()
方法返回的是实际大小而不是缩放后的大小。这导致了在某些设备上返回的屏幕尺寸与实际屏幕尺寸不一致。
解决方法是去除预缩放,在这种情况下,getWidth()
和getHeight()
将返回实际大小而不是缩放后的大小。对于平板开发者来说,这些方法也不会返回完整的屏幕尺寸,因为底部的导航栏并不是应用程序可以绘制的区域的一部分。因此,获取的尺寸是应用程序可以绘制的区域的大小,而不是整个屏幕的大小。
以上内容来源于这篇文档,在这篇文档的第二个重点中提到了禁用预缩放的方法以解决这个问题。通过去除预缩放,可以获取到准确和精确的屏幕尺寸。在平板上同样适用这个解决方法,去除预缩放后可以获取到应用程序可以绘制的区域的大小。
如何获取设备的屏幕尺寸?
问题的出现原因:代码返回的是DIP(密度独立像素),而不是实际的像素。
解决方法:
1. 使用以下代码获取屏幕尺寸的DIP值:
DisplayMetrics dm = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(dm); int width = dm.widthPixels; //320 dip int height = dm.heightPixels; //533 dip
2. 使用以下计算方法将DIP值转换为实际像素:
int widthPix = (int) Math.ceil(dm.widthPixels * (dm.densityDpi / 160.0));
现在,widthPix的值为480。
另外,可以通过dm.density或dm.scaledDensity来获取dm.densityDpi/160.0的值。