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

时间:2011-11-24 14:09:45

标签: java android xml layout

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

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

建议

  

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

     

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

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

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

接下来的最佳做法是什么

4 个答案:

答案 0 :(得分:5)

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

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

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

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

这个思维过程详见this blog postthese slides,但我认为最好通过访问一些示例网页并查看其实际情况来证明这一点。尝试访问this page(或this pagethis page)并更改浏览器的大小。请注意他们如何根据宽度动态更改布局 - 这也是您在Android中所需要的。

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

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

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

答案 1 :(得分:3)

如果使用“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将在每个屏幕尺寸上缩放。

答案 2 :(得分:1)

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

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

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

答案 3 :(得分:0)

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