2013-08-28 70 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