【问题标题】:Understanding Android layout and size了解 Android 布局和大小
【发布时间】:2013-08-28 22:20:55
【问题描述】:

有人可以帮我处理 Android 布局吗?我已经研究了一个星期了,我和以前一样困惑。 这是我的问题。

假设我有一个按照这张图片的布局(大致按比例)。

它是一个带有背景图像的简单视图(我将其拉伸以适应)。 在这个观点上,我有一个:

  • 顶部:“欢迎”图像,占视图宽度的 80%,距视图左侧 10%,距视图右侧 10%
  • 中间:6 个 X 导航按钮,再次填充视图宽度的 80%,距视图左侧 10%,距视图右侧 10%
  • 底部:填充 100% 屏幕宽度的页脚图像

我正在尝试创建用于顶部图像、导航按钮和页脚图像的图像(.png 文件),这就是问题的开始。 我使用像素值来定义按钮的大小,但当然 Android 不能这样工作。 我在网上找到了最流行的屏幕分辨率(ldpi、mdpi、hdpi 和 xhdpi)的粗略尺寸指南(以像素为单位),如下所示。决议。抱歉,我忘记了源在哪里。

“通常,我为 320x480 屏幕设计 mdpi 图像,然后按照规则将尺寸相乘以获得其他图像 基本上,设计图像的一般准则是:

mdpi - 320 x 480

  • ldpi 是 mdpi (240 x 360) 的 0.75 倍
  • hdpi 是 mdpi (480 x 720) 的 1.5 倍
  • xhdpi 是 mdpi (640 x 960) 的 2 倍尺寸"

我创建了一个导航按钮来测试和设置像素值的大小,如下所示(注意:这只是宽度,因为高度会相应地缩放以保持透视)

  • ldpi - 160 像素
  • mdpi - 280 像素
  • hdpi - 420 像素
  • xhdpi - 680 像素

在 Eclipse 中的不同模拟器上查看时,这一切似乎都正常。但今晚我在 Android 开发者页面上遇到了这个问题。 http://developer.android.com/guide/practices/screens_support.html#testing

在页面底部,它将小、中、大和超大屏幕进一步细分为每个能够具有 ldpi、mdpi、hdpi 和 xhdpi 的屏幕。

现在我完全迷路了。因此,我是否应该为每个按钮创建 16 个不同的图像,每个图像的大小略有不同,然后让 Android 决定哪一个最适合? 而且我还读到了根据屏幕分辨率定义不同布局的好习惯。 我可以理解这一点,因为您可以在更大的尺寸上有不同的布局,但我认为在我的情况下不需要它。 它只是一个非常基本的应用程序,我不需要针对不同屏幕尺寸的不同布局和功能。 该应用必须支持所有/大多数手机屏幕尺寸,但不一定支持平板电脑

也许我搞错了,但这让我很困惑。

谁能帮我把它分解成最简单的形式?

【问题讨论】:

    标签: android android-layout size screen-resolution pixels


    【解决方案1】:

    好的,首先你需要了解的是Nine-Patches。 @RomanNurik 制作了一个很棒的生成器here,它可以帮助您从源图像生成资产。

    对于您的特定布局(您可能希望使其更适应更大的屏幕尺寸),布局的总体思路是这样的:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/root"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <ImageView
            android:id="@+id/footer"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:adjustViewBounds="true"
            android:layout_alignParentBottom="true"
            android:src="@drawable/my_footer"
            android:scaleType="centerCrop" />
    
        <LinearLayout
            android:id="upper_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@id/footer"
            android:orientation="horizontal"
            android:weightSum="10">
    
            <LinearLayout
                android:id="button_header_container"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="8"
                android:paddingTop="16dp"
                android:paddingBottom="16dp"
                android:orientation="vertical">
    
                <ImageView
                    android:id="@+id/header"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:adjustViewBounds="true"
                    android:layout_marginBottom="16dp"
                    android:src="@drawable/header"
                    android:scaleType="centerCrop" />
    
                <Button
                    android:id="@+id/button1"
                    android:layout_width="match_parent"
                    android:layout_height="44dp"
                    android:layout_marginBottom="16dp"
                    android:background="@drawable/my_button_nine_patch"
                    android:gravity="center"
                    android:text="Navigation Button" />
    
                <Button
                    android:id="@+id/button2"
                    android:layout_width="match_parent"
                    android:layout_height="44dp"
                    android:layout_marginBottom="16dp"
                    android:background="@drawable/my_button_nine_patch"
                    android:gravity="center"
                    android:text="Navigation Button" />
    
                <!-- Etc. for other buttons -->
    
            </LinearLayout>
    
        </LinearLayout> 
    
    </RelativeLayout>
    

    【讨论】:

    • 感谢所有的 kcoppock。我以前遇到过 9-Patch,但从未使用过。也感谢您的布局代码,非常感谢。在 9-Patch 生成器上,我将图像拖入并进行预览。在左侧,我可以选择图像的 m/h/x/xxhdi 版本。如果我选择其中一个,我可以在预览窗口中看到图像缩放。回到我的问题,我是否必须为所有人下载图像的版本 - 所以选择 mdpi 然后下载 .zip。然后选择hdpi并下载.zip?下载完所有图像后,将所有图像放入我的可绘制文件夹中吗?抱歉,我没有完成这一步?
    • ZIP 包含一个适用于所有密度的版本,已经在正确的文件夹结构中。您可以将它们直接复制到您的res 文件夹中。
    【解决方案2】:

    dpi 只是告诉您每英寸点数的比率。 静态显示尺寸(例如 7 英寸)的分辨率越大,dpi 越高,因为在与低分辨率屏幕相同的物理区域中必须有更多的点。 为 Google 定义的组创建图片就足够了。

    【讨论】:

    • 这是否意味着我必须为每个可能的尺寸和分辨率的按钮创建 16 个不同的图像?
    • 不,您只需为您的按钮创建 4 或 5 个(无论是否包括 xxhdpi)图像。 dpi 的东西非常令人困惑。
    • 是的,我也看到有一个 xxhdpi,但我是否正确地说那是进入平板电脑领域?考虑到屏幕分辨率的指导方针,就我应该瞄准的目标而言,我上面的尺寸看起来是否正确?就像我说的,它们看起来不错,但我想 100% 确保它在应用商店发布后会很好。
    • @HansMoolman DPI 与屏幕尺寸没有内在关联,尽管通常随着屏幕尺寸的增加密度会降低(鉴于屏幕的分辨率保持不变)
    猜你喜欢
    • 2014-12-18
    • 2015-04-30
    • 1970-01-01
    • 2016-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多