我目前正在开发一款给我带来麻烦的Android应用。我的应用程序严重依赖于正确显示在屏幕上的图像。不幸的是,像FWVGA / WVGA分辨率差异854和800这样的东西给我带来了一些真正的问题,除了其他尺寸/密度和分辨率之外。
我不知道我是否只是在这里忽略了这一点,但是如何让我的应用程序在两种分辨率上正确显示,而不是“挤压”我的图像或切断给我黑条等等?
似乎没有立即呈现的解决方案,我可以让它自动从右侧屏幕的可绘制文件夹中显示不同的图像。
我尝试过使用displaymetrics,但除非我的清单声称它支持所有屏幕尺寸,否则Android操作系统实际上会“谎言”我的应用程序关于当前的分辨率。
有人请告诉我一个简单的解决方案。
答案 0 :(得分:2)
如何让我的应用程序在两种分辨率上正确显示,而无需“挤压”我的图像或切断给我黑条等等?
恕我直言,首先重新审视您的GUI设计:
我的应用程序严重依赖于正确显示在屏幕上的图像。
这在任何地方都不是特别好,恕我直言。例如,用户可以将Windows(包括浏览器)的大小调整为任何所需的大小。
似乎没有立即呈现的解决方案,我可以让它自动从右侧屏幕的可绘制文件夹中显示不同的图像。
因为Android设备可以具有任意数量的屏幕尺寸,就像Windows和Web浏览器可以具有任意数量的屏幕尺寸一样。 Android确实允许您根据密度(例如-hdpi
)或屏幕尺寸(例如-large
)选择图像,但这些图像不会映射到分辨率,也不会映射到分辨率。
答案 1 :(得分:1)
正如CommonsWare所指出的,对于这种情况,你最好的选择是重新考虑你的布局结构。使用RelativeLayouts和小部件,可能会完成与您当前所拥有的相似的结果(如果不是相同的)。如果您愿意发布样本,我们可以建议您这样做的方法。
那就是说,你的问题的答案是在运行时查询设备的屏幕分辨率(记住通知栏占用的空间,以及标题栏 - 除非你没有标题栏主题它)。每种可能的屏幕分辨率都需要不同的图像,随着更多设备(特别是平板电脑)开始发布,您将不得不继续为每个不同的图像提供更多图像和自定义代码。你可以看出为什么这不是一个理想的情况。
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
int screenWidth = metrics.widthPixels();
int screenHeight = metrics.heightPixels();
然后,您可以将其放入if-then-else块,并确定分辨率,并相应地设置图像。我不推荐这个。
答案 2 :(得分:0)
在显示和分辨率方面,如果不将图像压缩/拉伸或使用信箱,则无法将图像调整为任何宽高比。我知道这并没有真正回答你的问题,但是如果你无法从操作系统获得可靠的屏幕尺寸信息,那么尝试选择最大分辨率的图像并为较小的分辨率裁剪它们。只要确保边界没有任何有趣的东西。