使用 values-swdp 在 Android 中定位不同的屏幕尺寸

Posted

技术标签:

【中文标题】使用 values-swdp 在 Android 中定位不同的屏幕尺寸【英文标题】:Targeting different screen sizes in Android with values-swdp 【发布时间】:2012-06-24 01:39:25 【问题描述】:

我知道我之前已经在项目中使用过这个,但无论出于何种原因,当我尝试将尺寸放入“values-sw360dp”时,宽度 >= 360dp 的屏幕并没有接收到这些尺寸,他们正在恢复到常规的“值”文件夹。任何想法为什么?如果您需要更多信息,请随时询问。

感谢您的宝贵时间。

编辑:获取屏幕分辨率的方法:(仿生出来到 360x640dp)

Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth();
int height = display.getHeight();
Log.d("Screen width(px)", width+","+height);

float density = getResources().getDisplayMetrics().density;
Log.d("Screen density", density+"");

float widthDp = width / density;
float heightDp = height / density;
Log.d("Screen width(dp)", widthDp+","+heightDp);

【问题讨论】:

那么什么手机/模拟器/屏幕尺寸没有选择正确的值呢? 机器人仿生。 (360x640dp) 我有默认的“values”文件夹和一个“values-sw360dp”文件夹... Bionic 使用默认“values”文件夹中的尺寸。 【参考方案1】:

我也认为你的数学不好。

Nexus one 是 480 x 800 像素,屏幕为 3.7 英寸,DPI 为 252dip。

你可以使用这个网站来计算密度:dpi

或手动操作。

这解释了密度桶:list-of-android-devices-with-pixel-density-buckets。

因此,如果要让 Google Nexus One 使用它,您需要

/values-sw530dp/

顺便说一句,你声明吗

android:minSdkVersion="7" 在您的清单中,因为您的尝试在 Android 1.5 上不起作用(如果您使用旧的模拟器或其他东西)。

【讨论】:

这对你来说也可能是一个有趣的阅读:***.com/questions/9111206/… 你从哪里得到 sw530dip?我认为它应该是“宽度/比例因子”,所以它是“480 / ~(252 / 160)”= sw320dp。同样来自文档“320dp:典型的手机屏幕(240x320 ldpi、320x480 mdpi、480x800 hdpi 等)”。【参考方案2】:

我认为你的数学是错误的:

根据***,显示器是 4.3 英寸 960 × 540 px qHD at 256 ppi

160/256 = 0.625

0.625*540 = 337.5

试试values-sw335dp 看看是否可行

【讨论】:

我尝试过使用低得离谱的值,例如 100dp,但即使是我的 Nexus One 也无法使用它。这是我从 WindowManager 检查和日志语句中获得的信息:540x960(原始像素),1.5 密度 = 360x640 in dp。也许我在转换中做错了,或者 getResources().getDisplayMetrics().density 的值有误? 试着吐出你从 DisplayMetrics.density 收到的值,我很想知道它给了你什么。此外,请确保您的目标至少为 13 级。

以上是关于使用 values-swdp 在 Android 中定位不同的屏幕尺寸的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 12 中使用 WorkManager

Android Handler使用

何时在 Android 中使用 RxJava,何时使用 Android 架构组件中的 LiveData?

如何在 android 应用程序中使用 OSM 地图。?有啥教程可以学习在android中使用OSM吗?

在 xml (android:, app:, @.., ...) 上使用 android 前缀

Android:如何在 Android 中使用 tensorflow lite 扩展图像的维度