Android UI设计:支持多屏幕

20

我已经多次阅读过这篇教程SUPPORTING MULTIPLE SCREENS,并查看了许多有关Design Android UIs to fit well with all android screen sizes的Stackoverflow问题。

但仍然在努力为所有屏幕大小提供最佳和相同的用户体验。

当我设计界面时,始终牢记以下图表。enter image description here

目前,在我的应用程序中,它在res文件夹下使用以下文件夹结构。

enter image description here

此外,在xml布局文件中定义大小时,我使用dpsp单位。

小屏幕尺寸

对于小屏幕尺寸,它完美地参考了在layout-small下定义的UI,并且没有显示任何问题。

正常屏幕大小

当我设计正常屏幕大小的布局(layout文件夹)时,我使用3.5英寸的安卓设备和3.7英寸的模拟器来测试UI在正常屏幕大小下的外观。

因此,我的布局在这个尺寸看起来非常好,但三星Gallaxy S3(4.8英寸)和S4(5.0英寸)具有略大的屏幕,仍然参考了正常屏幕大小的布局。因此,在这些更大的屏幕上,底部会留下相当可观的空间未被使用,并且界面看起来不好看。

另外,在清单文件中,我定义了以下内容:

<uses-sdk
    android:minSdkVersion="4"
    android:targetSdkVersion="17" />

<supports-screens 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
    android:anyDensity="true" />

我对图像密度(drawable-hdpi/drawable-xhdpi/drawable-mdpi/drawable-ldpi)没有任何问题。

(1). 不知道我错在哪里导致在大屏幕(4.8英寸)上使用普通布局效果不佳,希望了解原因。

(2). 同时,如果有人能够解释在Android中定义Res文件夹下的文件夹结构以适配所有屏幕尺寸的最佳实践和标准方式,将不胜感激,因为这很令人困惑。谢谢。


您可以为特定的分辨率和屏幕尺寸指定布局文件夹。这是新的做法。 - neo
你知道4.8英寸和5英寸屏幕的宽度/高度以“dp”为单位是多少吗? - LuckyMe
6个回答

18

不要使用dp大小单位,可以使用相对于屏幕大小的sdp大小单位

使用sdp大小单位,您可以在所有屏幕尺寸上拥有相同的用户体验,仅需一个布局xml文件。

请谨慎使用!例如,在大多数情况下,您仍然需要为平板电脑设计不同的布局。

有关文本视图大小,请参考基于sp大小单位的ssp大小单位


非常感谢你,救星! :) - Stephan
好的,这是我听到的新事物。 - Bhupinder

3
您可以使用以下资源文件夹为具有较大屏幕的设备创建布局:
7英寸平板电脑 res\layout-sw600dp 10英寸平板电脑 res\layout-sw720dp

嗨Plato,感谢您的回答,但是我知道这种方式是在Android 3.2及更高版本中引入的。在我的情况下,最低支持版本是Android 1.6(android:minSdkVersion="4")。此外,我的问题与“正常”大小的屏幕有关。我想知道如何设计一组布局,以便在Galaxy S3 / S4(4.8英寸范围设备)上良好运行,同时在3.7英寸(正常大小)设备上也能良好运行... - JibW
那么唯一想到的就是通过使用MATCH_PARENT或不同布局的权重功能,使您的布局自动调整到屏幕大小。 - Plato
是的,Plato,我已经按照你在这里所解释的方式使用布局进行了自动调整。因此,在每种情况下都可以获得完整的水平空间(宽度)并且正常工作......问题是没有办法调整布局项以使用屏幕(高度)的全部垂直空间。当我将普通大小的UI调整为适用于3.5-3.7英寸大小时,当涉及到4.8-5.0英寸级别的屏幕时,它会从底部留下相当多的空间,因为它们也参考同样大小的普通UI。 - JibW
你可以在垂直线性布局中使用权重,例如使视图在垂直方向上填充一些空间。或者你的意思是你的布局是这样设计的,所以它可以在垂直方向上进行缩放? - Plato

1
如果非常重要需要指定到这个程度,有一个方便的文件夹命名工具,那就是链式命名。例如:layout-w480dp-normal,这将是至少宽度为480dp且属于normal类别的屏幕尺寸。注意:我不明白为什么需要开发如此详细的要求,但根据链接的来源,应该可以正常工作。

来源

请务必遵循这些规则


1

针对多屏幕支持:

  1. 移动端:创建以下不同的值文件夹:

values                     (For mdpi devices)
values-hdpi                (For hdpi devices)
values-xhdpi               (For xhdpi devices)
values-xxhdpi              (For xxhdpi devices)

  1. 平板电脑:创建下面提到的不同布局文件夹:

layout-sw600dp             (For 7″ to 9″ Screen)
layout-sw720dp             (For 10″ to above screen)

For image resources: Create 4 drawable folders:

drawable-mdpi
drawable-hdpi
drawable-xhdpi
drawable-xxhdpi


还有其他方法吗? - user5289749

0

广义密度。

A set of six generalized densities:
ldpi (low) ~120dpi
mdpi (medium) ~160dpi
hdpi (high) ~240dpi
xhdpi (extra-high) ~320dpi
xxhdpi (extra-extra-high) ~480dpi
xxxhdpi (extra-extra-extra-high) ~640dpi

只需为不同的图像定义文件夹,例如:

drawable-large-xhdpi: copy (drawable-xxhdpi images)
drawable-xlarge-xhdpi: copy (drawable-xxxhdpi images)
drawable-xxhdpi: 1080x1920 slicing
drawable-xxxhdpi : 1440x25601 slicing

在清单文件中添加对多个屏幕尺寸的支持。
 <supports-screens
        android:anyDensity="true"
        android:largeScreens="true"
        android:normalScreens="true"
        android:resizeable="true"
        android:smallScreens="true"
        android:xlargeScreens="true" />

This works for me to support all tablets including Nexus 9,10, and all devices with different resolution and dencity


xlarge、large以及所有相关内容现已被弃用。用户swNNNdp - Chirag Savsani
如果我们定义了sw600dp和sw720dp,那么我们必须为Nexus 9和Nexus 10分别定义不同的布局,这就是为什么使用“大”和“超大”是支持两者的单个布局的技巧。 - Amit

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接