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

问题描述:

设计UI时,我们需要定位许多android突变和各种屏幕分辨率。在Android上定位多个屏幕分辨率时使用的最佳做法

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

建议

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

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

但我仍然认为,我们可以在不为每个屏幕分辨率创建独立布局的情况下支持多个屏幕。或者我错了?

我知道,我也使用,9-补丁可缩放的背景图像(或形式的输入,等等)
和我使用DP(密度像素)到大小声明相对于屏幕密度

但是什么是下一个最佳实践

我认为最近这个问题的答案已经改变了,但我会回顾历史解答。

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

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

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

这种思想过程是由this blog postthese slides详细,但我认为这是最好去一些网页样本,并看到它的行动证明。尝试访问this page(或this pagethis page)并更改浏览器的大小。注意它们是如何根据宽度动态改变布局的 - 这也是您在Android中需要的。

所以,现在你已经有了一个可以在屏幕宽度150dp和400dp之间工作的布局,另一个工作在401dp和800dp之间;第三个可以处理800dp和1000dp等等。这种思维方式并不会以作为开发人员的身份完成,而是比以前做更多的工作 - 而不是定义电话布局,平板电脑布局(每个人都有一个肖像/风景布局),您只需定义一些适用于不同宽度的布局。

现在我们处于一个尴尬的过渡阶段,因为大多数人没有有支持这种做法的设备。所以“最佳实践”基本上都是上述的。在几年之内,当每个人都有ICS和超越,那么我们都可以松了一口气。我很抱歉,如果你正在寻找特定的解决方案,这个答案最终是相对理论性的而不是具体的答案,主要是因为我觉得这个问题是非常开放的,如果你有一个特定的问题,你想要。要解决,我可以尝试解决其他地方)

+0

没有理由道歉,在阅读你的答案后,这是完全正确和清晰的,情况相当复杂。最好提出这个理论,而不是写出所有可能的组合。谢谢 –

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

  • 避免AbsoluteLayout,我知道这是过时的,但你仍然可以使用它;忘记它,使用的LinearLayout和RelativeLayout的,而不是
  • 使用9补丁创建按钮和背景,使他们出现在同一每个分辨率
  • 使用DisplayMetrics()获取有关屏幕的信息,以在不同屏幕上显示不同的内容(例如,在智能手机中显示AdMob“横幅”,在平板电脑上显示AdMob“排行榜”)
  • 首先创建WVGA布局(这只是个人观点,但我发现它不错的工作):据我所知,大多数智能手机都是WVGA或至少HVGA(QVGA不是那么频繁),所以创建一个完美的WVGA layou t将使你能够满足大量的手机,比你可以为lpdi屏幕和平板电脑创建不同的布局(目前也是市场份额少数)

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

+0

所以我仍然无法避免为不同的屏幕创建不同的布局xml?只有在考虑小屏幕时,平板电脑才不是解决方案的一部分,我清楚地知道我们需要为移动设备和其他平板电脑创建其他布局 –

+0

如果要创建高质量的应用程序,则可能必须创建不同的布局和不同的drawables。但这一切都取决于您想要创建的内容:如果您正在讨论创建游戏,则某些游戏进程(即AndEngine)可以自动缩放以适应屏幕。 – Mangusto

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

+0

所以你推荐在控制器中使用计算器?在渲染后如何调整视图?你能提供一些链接或代码示例吗?谢谢 –

如果您使用“dp”构建视图,它基本上与eack屏幕大小相同。
在大多数情况下,您更喜欢您的视图会根据屏幕大小调整其大小。
当然,在大多数情况下,您需要为平板电脑构建单独的布局。
但是,除了我可以推荐你做下面的步骤:

1.添加this库到您的项目。

2.现在在你的布局,你可以写的看法那样:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="I'm scalable!" 
    android:textSize="@dimen/_12sdp"/> 

在这个例子中你的TextView将规模上的每个屏幕尺寸。

+1

顺便说一句, 如果你在每个文件中添加以下适当的值,你可以使用它来了解什么预览使用什么dimen文件 values-sw #### dp