2013-08-28 69 views
0

有人可以帮助我使用Android布局。我一直在研究它一个星期,而且我一直都很困惑。 这是我的问题。了解Android的布局和大小

说我有这张图片的布局(大致按比例)。

arbitrary phone with approximate layout

及其与背景图像(我延伸到适合)的简单视图。 从这个角度来看我有一个:

  • 顶部:“欢迎”的形象,填补了视图的宽度的80%,并且是从左边的图10%和10%,但从
  • 中东权:6个X导航按钮,再次填充视图宽度的80%,从左侧看10%,右侧10%
  • 底部:填充屏幕宽度100%的页脚图像

我想创建图像(.png文件)用于顶部图像,导航按钮和页脚图像,这就是问题开始的地方。 我使用像素值来定义按钮的大小,但当然Android不会像这样工作。 我在网上发现了最流行的屏幕分辨率粗略尺寸指南(像素) - ldpi,mdpi,hdpi和xhdpi,如下所示。决议。抱歉,我忘记了源代码的来源。

“通常情况下,我设计MDPI图像的分辨率320x480屏幕,然后乘以尺寸按规则以获取基本上其他 图像,设计图像的一般原则是:

MDPI - 320×480

  • LDPI是MDPI的0.75倍的尺寸(240×360)
  • HDPI是MDPI的1.5倍的尺寸(480×720)
  • xhdpi是MDPI的2倍dimensinons(640×960)”

我已经创建了一个导航按钮,以测试和设置在像素值的尺寸如下(注意:这仅仅是作为高度被相应地缩放,以保持透视宽度)

  • 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决定哪个最适合? 我也读过它的好习惯来定义不同的布局以及屏幕分辨率。 这我可以理解,因为你可以有更大尺寸的不同布局,但不认为我会在我的情况下需要它。 它只有一个非常基本的应用程序,我不会要求不同的屏幕尺寸不同的布局和功能。 该应用程序将不得不支持所有/大多数手机屏幕尺寸,但不一定是平板电脑

也许我有这种错误的方式,但这对我来说很混乱。

任何人都可以请把它分解成它最简单的形式给我吗?

回答

2

好了,好了,你需要了解的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> 
+0

感谢所有kcoppock。我以前遇到过9-Patch,但从未使用它。感谢布局代码,非常感谢。在9-Patch生成器上,我拖入一个图像并进行预览。在左侧,我可以选择图像的m/h/x/xxhdi版本。如果我选择我可以在预览窗口中看到图像缩放。回到我的问题,我是否必须下载所有版本的图像 - 所以选择mdpi然后下载.zip。然后选择hdpi并下载.zip?当所有下载都把我的可绘制文件夹中的所有图像?对不起,但我没有得到这一步? – heyred

+0

ZIP包含所有密度的版本,已经在正确的文件夹结构中。你可以将它们直接复制到你的'res'文件夹中。 – kcoppock

0

dpi只是告诉你每英寸的点数。 静态显示尺寸(例如7“)的分辨率越大,dpi的分辨率就越高,因为与低分辨率屏幕相同的物理区域中必须有更多的点。 这足以创建您的图片,谷歌已经定义的群体。

+0

那么这是否意味着我必须为每个可能的尺寸和分辨率的每个按钮创建16个不同的图像? – heyred

+0

不,你只需要为你创建4个或5个(包括xxhdpi)图像按钮。 dpi的东西很混乱。 – MKAI

+0

是的,我看到还有一个xxhdpi,但我说正在进入平板电脑版吗?根据我应该瞄准的目标来获得我想要的结果,根据屏幕分辨率的指导原则,上述尺寸是否合适?就像我说的,他们看起来不错,但我想100%确定一旦在应用程序商店发布它就会没问题。 – heyred