1

我正在为所有屏幕尺寸和 dpi 开发一个应用程序。

问题是对于比正常更大/更小的屏幕,UI 正在缩放,这意味着我认为屏幕兼容模式已启用。

这是我的目标:我有一个高度为 90 像素的图像按钮,所以我认为它在 normal-mdpi 设备中是 90 dp,我希望它在越来越小的屏幕尺寸中保持 90 dp。所以对眼睛来说,大小保持不变。

我遇到的问题是在普通 mdpi 设备中看起来不错(90 dp),但在大型 mdpi 设备中看起来更大并且具有缩放伪影。

我的目标是 2.3.3 的最小 android 操作系统,因此我有以下清单:

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="16" />

<!--
    If not set explictly, screen compatibility mode would be enabled for
    large screen, which is scaling of normal
-->
<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:normalScreens="true"
    android:smallScreens="true"
    android:xlargeScreens="true" />

根据 android 文档,如果目标是 10 或以下,则必须指定 support-screens,否则默认启用兼容模式。问题是我正在指定它,但我仍然启用了兼容模式。

有任何想法吗?如果我的理解有误,请告诉我。

谢谢

4

2 回答 2

1

好的,我想我在一整天的调试后发布了一个答案。

对我来说,问题似乎是模拟器。当您启动 ADV 时,您需要计算实际屏幕设备大小并了解您的显示器 dpi,以便您可以在启动选项中进行设置。完成此操作后,我在布局中指定为“x dp”并在 PNG 中具有“x 像素”的图像按钮在所有屏幕尺寸和密度中看起来都相同(英寸)。

如果您想摆脱由于 android 缩放而导致的伪影,您可以在 ldpi、hdpi、xhdpi 文件夹中提供您自己的图像,并应用相应的缩放。

要计算设备屏幕尺寸,请使用启动选项对话框中提供的分辨率和密度,然后使用以下公式进行计算:(看起来很痛苦,但它有效,您可以在计算机显示器中用尺子测量,如果 x in,设备将在您的标尺中为 x)屏幕尺寸 = sqrt((w 像素/dpi)^2 +(h 像素/dpi)^2)其中 w,h 是以像素为单位的分辨率

为了计算您的显示器 dpi,我搜索了我的计算机类型。对于 mac book pro 15.4 in,它是 128,对于 Apple Cinema display 27,它是 109。希望这会有所帮助。

于 2012-09-12T23:35:05.010 回答
0

我用来保持所有图像大小相同的方法是使用常规显示 getWidth 和 getHeight 方法来设置变量。然后我使用 Bitmap.createScaledBitmap 将我的图像设置为屏幕大小的 %。无论dpi如何,它看起来都一样。在 16:9 的 240 dpi 屏幕上,在 480 dpi 16:9 屏幕上获得相同的图像将是 dpi 的两倍。

我在画布上使用这些图像,但我猜它们会相似。在做动画等时,不在 GL 中也很重要。我不得不重做我当前的游戏,因为当我以较小的 dpi 玩它时,它移动得如此之快,就像闪电一样!在 180 和 240 上移动 10 个像素令人大开眼界。

于 2012-09-13T01:38:53.640 回答