【问题标题】:Different screen sizes不同的屏幕尺寸
【发布时间】:2015-12-01 14:16:54
【问题描述】:

我查看了所有的 android 文档和许多堆栈溢出问题,并且我有一个关于支持多种屏幕尺寸的问题。如果我有一些可绘制对象,我知道我需要将它们放在如下文件夹中:

但是 android 会为我制作这些文件夹吗?当我尝试将图像复制并粘贴到可绘制文件夹中时,我会得到如下信息:

没有目录名称。那么我是否必须手动创建这些目录,然后 android 会根据屏幕大小自动选择要使用的正确图像吗?

我对布局有同样的问题。例如,我知道要支持多种屏幕尺寸,我需要将布局放在许多文件夹中,如下所示:

但是现在,我的布局是这样的:

所以我必须手动创建每个布局文件夹,然后将我当前的布局复制并粘贴到新的布局文件夹中,然后进入每个布局,并渲染它直到它在 XML 的 android 设计选项卡上看起来不错? 那么,android 会根据屏幕尺寸为我挑选出最好的布局吗?

我在尝试制作新布局时也遇到了这个问题。填什么?

非常感谢,

因为这些问题,我一直在推迟让我的应用兼容不同的布局,希望能得到解答!

【问题讨论】:

    标签: java android string performance android-layout


    【解决方案1】:

    您可以创建不同的布局文件夹并为标准屏幕尺寸创建布局。有一组六个广义密度:

    ldpi (low) ~120dpi
    mdpi (medium) ~160dpi
    hdpi (high) ~240dpi
    xhdpi (extra-high) ~320dpi
    xxhdpi (extra-extra-high) ~480dpi
    xxxhdpi (extra-extra-extra-high) ~640dpi
    

    您可以为这些创建图像和布局并相应地使用。在您的清单中也提到:

    <compatible-screens>
        <screen
            android:screenDensity="ldpi"
            android:screenSize="small" />
        <screen
            android:screenDensity="mdpi"
            android:screenSize="normal" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="large" />
        <screen
            android:screenDensity="xhdpi"
            android:screenSize="xlarge" />        
    </compatible-screens>
    

    更多详情请参考Supporting Multiple Screens

    有一些提示:

    1. 不要硬编码任何布局参数,例如宽度、高度等。
    2. 不要使用“px”。使用“sp”作为字体大小,使用“dp”作为布局宽度、布局高度等。
    3. 使用RelativeLayoutLinearLayout,不要使用AbsoluteLayout,因为它已被弃用。
    4. ScrollView 在任何需要布局的地方使用,因为它支持单个视图。

    【讨论】:

    • Android 会根据屏幕大小选择使用哪种布局,对吧?
    • 是的。如果您正确执行上述步骤,它将自动执行此操作
    • 好的,所以我有一个名为 activity_main.xml 的布局。那么您提到的不同密度的目录名称是什么?
    • 您必须在所有文件夹中为此布局使用相同的名称activity_main.xml。那么只有android会知道这些是一样的
    • 那么像activity_main-ldpi 这样的目录名称?我问的原因是因为在另一个答案中,sud 提到使用activity_main-sw480dp...之类的东西,我不知道这意味着什么。 android 文档说ldpi, mdpi, hdpi...etc. 已弃用,我应该改用sw&lt;&gt;dp。它还表明数字是最小宽度......这似乎更令人困惑。我应该只使用已弃用的目录吗?如果没有,我该如何使用sw&lt;&gt;dp 目录?谢谢
    【解决方案2】:

    是的,您必须为不同的屏幕尺寸制作不同的布局文件夹,例如 layout-sw480dplayout-sw600dp 就像为不同的屏幕尺寸和横向视图使用 layout-landscape 一样。你必须使用drawable-hdpi,drawable-mdpi,drawable-ldpi,drawable-xhdpi等为不同的屏幕分辨率设备放置不同的分辨率图像

    【讨论】:

    • 对于横向视图,如果我创建另一个文件夹说layout-landscape并将我的布局放入,当手机转向横向时,该布局会显示吗?另外,android 会根据屏幕大小选择使用哪种布局,对吧?
    • 是的,如果您创建 layout-landscape,那么当手机旋转此文件夹中的布局时,将会加载
    • 另外,android 会根据屏幕大小选择使用哪种布局,对吧? - 是的,它会根据屏幕大小进行选择,比如小屏幕将用于layout 文件夹和中等屏幕layout-sw480dp 等等
    • 好的,谢谢。我有另一个问题。那么我应该使用layout-normal, layout-large, layout-small...etc. 还是应该使用layout-sw480dp 之类的东西?因为在发布的另一个答案中,Jas 建议使用普通的、大的、小的东西,那该怎么办?
    • no not like this-layout-normal, layout-large, layout-small...etc.... 使用 layout-sw480dp , layout-sw600dp 等
    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2015-11-18
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 2018-01-07
    • 2018-12-19
    • 1970-01-01
    相关资源
    最近更新 更多