在Android上定位多个屏幕分辨率时使用的最佳做法

在设计UI时,我们需要针对许多Android突变和各种屏幕分辨率。

  • 如何在android中区分480 * 800和480 * 854屏幕分辨率的布局?
  • 如何在android中布局支持各种屏幕?

上述两个问题都建议对不同的屏幕使用不同的布局代码。 真的有必要吗?

  • http://developer.android.com/guide/practices/screens_support.html

建议

为不同的屏幕尺寸提供不同的布局

为不同的屏幕密度提供不同的位图drawable

但我仍然认为,我们可以支持多个屏幕而无需为每个屏幕分辨率创建独立布局。 或者我错了?

我知道,我确实使用了9-patch用于可缩放的背景图像(或表单输入等)
我使用dp(密度像素)来声明相对于屏幕密度的大小

但是下一个最佳做法是什么?

我认为最近这个问题的答案发生了变化,但我将重温历史解决方案。

Pre-Honeycomb,解决方案是创建一个动态布局,可以根据屏幕的大小调整自己(使用9-patches,dips,扩展/缩小的布局等)。 这意味着您的所有视图都不是“像素完美”,但您可以调整到您遇到的不同宽高比。 有时你会想出不同的横向和纵向布局,但除此之外,没有必要进行定制。

随着Honeycomb的发布,问题变得更加复杂。 现在,您拥有截然不同的屏幕尺寸,您的应用程序拉伸看起来并不好看。 你有平板电脑从7“延伸到10” – 哪一个是“大”而不是“xlarge”? 3.0和3.1是一个尴尬的时期,您必须检测API版本/屏幕大小并相应地配置您的应用程序(假设您的应用程序支持手机和平板电脑)。

然而,一切都在3.2及以后发生了变化。 现在,可以这样描述最佳实践: 像网页设计师一样思考,而不是Android设计师 。 而不是考虑手机与平板电脑与横向与纵向布局,而不是考虑适用于特定屏幕尺寸的布局。

这篇博文和这些幻灯片详细介绍了这个思考过程,但我认为通过访问一些示例网页并查看其实际情况可以最好地certificate这一点。 尝试访问此页面 (或此页面或此页面 )并更改浏览器的大小。 请注意他们如何根据宽度动态更改布局 – 这也是您在Android中所需要的。

所以现在你有一个在屏幕宽度150dp和400dp之间工作的布局; 另一个在401dp和800dp之间工作的; 第三个处理800dp和1000dp等等。这种思维方式最终不会因为你作为开发人员而做出比以前更多的工作 – 而不是定义手机布局,平板电脑布局(每个都有纵向/横向) layout),您只需定义一些使用不同宽度的布局。

现在我们处于一个尴尬的过渡阶段,因为大多数人没有支持这种做法的设备。 所以“最佳实践”基本上都是以上所有。 几年后,当每个人都有ICS及以后,我们都可以松一口气。

(如果你正在寻找具体的解决方案,我道歉;这个答案最终是相对理论而不是具体答案,主要是因为我觉得这个问题非常开放。如果你有一个特定的问题想要解决,我可以尝试解决其他问题。)

如果使用“dp”构建视图,它基本上与eack屏幕大小相同。
在大多数情况下,您会希望视图的大小与屏幕大小成比例。
当然,在大多数情况下,您需要为平板电脑构建单独的布局。
但是,除了我可以建议你做下面的步骤:

1. 将此库添加到项目中。

2.现在在您的布局中,您可以编写以下视图:

 

在此示例中,TextView将在每个屏幕大小上缩放。

这些是一些建议,按随机顺序:

  • 避免AbsoluteLayout ,我知道它已被弃用,但你仍然可以使用它; 忘掉它,改用LinearLayout和RelativeLayout
  • 使用9-patch创建按钮和背景,以便它们对于每个分辨率看起来都相同
  • 使用DisplayMetrics()获取有关屏幕的信息,在不同的屏幕中显示不同的内容(即在智能手机中显示AdMob“Banner”,在平板电脑中显示AdMob“Leaderboard”)
  • 首先创建WVGA布局 (这只是个人观点,但我发现它是一种很好的工作方式):据我所知,大多数智能手机都是WVGA或者至少是HVGA(QVGA并不常见),所以创建一个完美的WVGA布局将使您能够满足大量的手机,而不是为lpdi屏幕和平板电脑创建不同的布局(目前市场份额也是少数)

总之,我建议您为手机和平板电脑创建一个布局,可以自行调整屏幕分辨率:这适合大多数设备; 对于临界设备(即7“平板电脑或5.3”手机),我将使用不同的drawables /不同的XML布局。

我建议尽可能使用相对计算而不是绝对。 避免对填充,边距等数字进行硬编码。只需给它们一个与所需属性相关的值,如宽度,屏幕高度或任何组件。