使用 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 中使用 RxJava,何时使用 Android 架构组件中的 LiveData?
如何在 android 应用程序中使用 OSM 地图。?有啥教程可以学习在android中使用OSM吗?