44

编辑:感谢您的所有回答和评论。在考虑之后,我会将问题的核心改写为:“如何确定和限制我的游戏能够运行的最小分辨率/比率”。因为 imo 要么游戏在最小的屏幕/比例(缺乏细节)上变得无法玩,或者即使支持最小的屏幕/比例也会显着降低所有其他游戏的体验。此外,我们甚至不知道最小分辨率是什么,或者除了禁用 ldpi 之外可以以任何方式限制它......这仍然没有告诉我们最小的 mdpi。毕竟我不是在想如何创造一个好的结果,而是如何创造一个完美的结果;)。猜猜这是不可能的(还没有?)。

注意:这纯粹是关于手机而不是平板电脑而且这个问题与应用程序无关,因为它与不使用 Android 布局系统的游戏有关。

我总是发现期望哪些决议的定义有些模糊。我知道文档中的列表

现在我的第一个问题是这个列表是否完整,或者换句话说,制造商是否允许使用其他分辨率或纵横比。我目前的方法是根据看起来像这样的纵横比来查看这个列表(不确定它是否准确,但你明白了):

  • ldpi:最小纵横比 4:3
  • mdpi:最小纵横比 3:2
  • hdpi:最大纵横比 16:9

4:3 3:2 16:9

因此,如果我想涵盖一系列设备,我会弄清楚我最小和最大的纵横比是多少,并设计最小的布局,同时让它自动增长到最大。例如,如果我想支持所有密度,我将屏幕设计为 4:3 并使其增长到 16:9。如果我删除 ldpi 支持,我会为 3:2 设计。当然,这假设永远不会有纵横比为 4:3 的 mdpi 设备,这让我们回到了我的第一个问题。

我首选的解决方案是在 Android Market 上指出我的应用程序可以处理哪些纵横比,但目前看来这似乎不可能。

有没有人有更好的方法?(请记住,它仅适用于手机上的游戏)

4

6 回答 6

19

我不能直接回答你的问题,但我想告诉你我的方法。我尽量不使用任何数字。相反,我尝试使用填充、边距和相对布局,以便我的视图在任何手机上都能正确显示。它还可以帮助我避免为不同的方向创建视图。

于 2011-08-19T16:11:52.180 回答
4

正如这里很多人之前提到的,我的方法也是充分利用与设备无关的组件,例如 paddin、margin 和 relativelayouts,并结合设备独立像素。

坦率地说,我希望我不是唯一一个,但充分利用 DIP(设备独立像素)和相对布局等......已将我的活动布局文件减少到每个活动 1 个而不是 3 种不同类型用于 HDPI、MDPI 和 LDPI。

如果您真的关心纵横比,您可以随时调用设备的显示属性(以像素为单位),并根据这些数字进行适当的布局计算。您可以在第一个活动的 onCreate 方法开始时调用它。

Display display = getWindowManager().getDefaultDisplay(); int displayWidth = display.getWidth(); int displayHeight = display.getHeight();

这将为您提供硬件 siplay 的宽度和高度值(以像素为单位)。在我看来,您选择超过 3 种布局类型的真正原因是确保图像分辨率保持足够清晰。

使用这些数字,您可以创建一些内部逻辑,计算要在某些小部件中加载的分辨率图像类型。从而为您省去制作3次相同布局的麻烦......

可能解释得有点神秘,但克服各种设备分辨率的主要问题是大量使用:

  • 相对布局
  • 设备独立像素

您还可以在 XML 布局中定义 DIP,因此每个组件在每种类型的设备上看起来都是一样的。

也许是一个愚蠢的例子,但是嘿,它对我有用:-) 下面我试图让 textview 上的文本大小在所有设备上都相对相同。您可以调用“TypedValue”类,并从那里提供的众多公共变量中进行选择。因为我想让 TextView 到处都是相同的相对大小,所以我使用了下面的代码:

someTextView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 18);

数字是设置 DIP 的大小应该有多大。TypedValue 可用于许多需要 INT 值作为维度属性的小部件或活动组件。玩它,你会发现它让生活变得更轻松:-p

希望这个答案有点帮助

于 2011-08-21T12:26:29.157 回答
4

我找到了问题的明确答案。

最低分辨率在 3.0 之前未定义。因此对于 3.0 及更高版本,可以选择最小分辨率,基于它设计游戏并在 superM 和其他人提到的更大屏幕/比率上动态扩展布局。

当您为不同的屏幕尺寸设计 UI 时,您会发现每种设计都需要最少的空间。因此,上面的每个通用屏幕尺寸都有一个由系统定义的相关最小分辨率。这些最小尺寸以“dp”单位为单位——在定义布局时应该使用相同的单位——这使系统可以避免担心屏幕密度的变化。

  • 超大屏幕至少为 960dp x 720dp
  • 大屏幕至少为 640dp x 480dp
  • 普通屏幕至少为 470dp x 320dp
  • 小屏幕至少为 426dp x 320dp

注意:这些最小屏幕尺寸在 Android 3.0 之前没有得到很好的定义,因此您可能会遇到一些设备被错误分类为普通和大尺寸。这些也基于屏幕的物理分辨率,因此可能因设备而异 - 例如,带有系统栏的 1024x720 平板电脑实际上由于系统栏使用它而对应用程序的可用空间要少一些。

来源

于 2011-08-24T16:43:04.790 回答
3

没有详尽的纵横比列表。制造商可以决定他们喜欢的任何分辨率。最重要的是,纵横比与像素密度不匹配,因此使用 ldpi/mdpi/hdpi 来决定纵横比可能不是一个好主意。

你处理这个问题的策略真的取决于你的游戏。当然,在某种程度上,您应该简单地将所有内容缩放更大/更小,但显然棘手的部分是在不同纵横比上不同的边缘。某些游戏(第一人称射击游戏、横向卷轴游戏、平铺自上而下的游戏等)只要您不担心为某些设备带来优势,您就可以提供不同的视野而不会出现太大问题,因为其他人您可能会考虑为背景使用可拉伸或可平铺的图形,并保持相同的有效(缩放)游戏区域。

于 2011-08-19T18:28:13.447 回答
2

您可以尝试在GameDev.stackexchange.com中询问

这是一个与您类似的问题:为不同的分辨率手机构建游戏

于 2011-08-19T17:12:34.693 回答
0

您可以根据屏幕分辨率限制哪些设备可以在市场上看到您的游戏:http: //developer.android.com/guide/appendix/market-filters.html

我还没有完全深入研究它,但不幸的是我看不到任何关于纵横比的提及,所以你可能必须填写所有你知道会起作用的内容。

如果做不到这一点,您可以设置您的图形看起来不错所需的最低分辨率,如果您不想更改游戏以获得较小的比例,您可以像在控制台游戏中那样添加黑色边框。但是不建议这样做,移动屏幕空间足够宝贵,所以如果你用黑条切掉游戏区域,我会将你的 HUD 移动到黑色区域,这样你仍然可以尽可能多地使用屏幕。

这里有更多关于支持屏幕尺寸的信息:http: //developer.android.com/guide/practices/screens_support.html

: D

于 2011-08-24T15:13:09.190 回答