2011-11-24 33 views
2

設計UI時,我們需要定位許多android突變和各種屏幕分辨率。在Android上定位多個屏幕分辨率時使用的最佳做法

上述兩個問題建議使用不同的佈局代碼不同的屏幕。它真的有必要嗎?

建議

提供不同的屏幕不同的佈局尺寸

爲不同屏幕密度提供不同的位圖繪圖

但我仍然認爲,我們可以在不爲每個屏幕分辨率創建獨立佈局的情況下支持多個屏幕。或者我錯了?

我知道,我也使用,9-補丁可縮放的背景圖像(或形式的輸入,等等)
和我使用DP(密度像素)到大小聲明相對於屏幕密度

但是什麼是下一個最佳實踐

回答

4

我認爲最近這個問題的答案已經改變了,但我會回顧歷史解答。

Pre-Honeycomb,解決方案是創建一個動態佈局,可以根據屏幕大小調整自己(使用9補丁,下沉,擴大/縮小布局等)。這意味着您的所有視圖都不會是「像素完美」,但您可以根據不同的寬高比進行調整。有時你會想出不同的橫向和縱向佈局,但除此之外,定製並不是必需的。

隨着Honeycomb的發佈,問題變得更加複雜。現在,您的屏幕尺寸大不相同,您的應用程序伸展看起來並不盡如人意。你的平板電腦從7英寸延伸到10英寸 - 哪一個是「大」還是「大」? 3.0和3.1是一個尷尬的時期,您必須檢測API版本/屏幕大小並相應地配置您的應用(假設您的應用同時支持手機和平板電腦)。

但是,一切都在3.2及以上的變化。現在,可以這樣描述最佳實踐:像網頁設計師那樣思考,而不是Android設計師。不要考慮手機和平板電腦,還是考慮橫向和縱向佈局,而不要考慮適用於特定屏幕尺寸的佈局。

這種思想過程是由this blog postthese slides詳細,但我認爲這是最好去一些網頁樣本,並看到它的行動證明。嘗試訪問this page(或this pagethis page)並更改瀏覽器的大小。注意它們是如何根據寬度動態改變佈局的 - 這也是您在Android中需要的。

所以,現在你已經有了一個可以在屏幕寬度150dp和400dp之間工作的佈局,另一個工作在401dp和800dp之間;第三個可以處理800dp和1000dp等等。這種思維方式並不會以作爲開發人員的身份完成,而是比以前做更多的工作 - 而不是定義電話佈局,平板電腦佈局(每個人都有一個肖像/風景佈局),您只需定義一些適用於不同寬度的佈局。

現在我們處於一個尷尬的過渡階段,因爲大多數人沒有有支持這種做法的設備。所以「最佳實踐」基本上都是上述的。在幾年之內,當每個人都有ICS和超越,那麼我們都可以鬆了一口氣。我很抱歉,如果你正在尋找特定的解決方案,這個答案最終是相對理論性的而不是具體的答案,主要是因爲我覺得這個問題是非常開放的,如果你有一個特定的問題,你想要。要解決,我可以嘗試解決其他地方)

+0

沒有理由道歉,在閱讀你的答案後,這是完全正確和清晰的,情況相當複雜。最好提出這個理論,而不是寫出所有可能的組合。謝謝 –

1

這些都是一些建議,以隨機順序:

  • 避免AbsoluteLayout,我知道這是過時的,但你仍然可以使用它;忘記它,使用的LinearLayout和RelativeLayout的,而不是
  • 使用9補丁創建按鈕和背景,使他們出現在同一每個分辨率
  • 使用DisplayMetrics()獲取有關屏幕的信息,以在不同屏幕上顯示不同的內容(例如,在智能手機中顯示AdMob「橫幅」,在平板電腦上顯示AdMob「排行榜」)
  • 首先創建WVGA佈局(這只是個人觀點,但我發現它不錯的工作):據我所知,大多數智能手機都是WVGA或至少HVGA(QVGA不是那麼頻繁),所以創建一個完美的WVGA layou t將使你能夠滿足大量的手機,比你可以爲lpdi屏幕和平板電腦創建不同的佈局(目前也是市場份額少數)

總之,我建議你爲手機和平板電腦創建佈局,可以調整自己的屏幕分辨率:這將適合大多數設備;對於臨界設備(即7「平板電腦或5.3」電話),我會使用不同的drawable /不同的XML佈局。

+0

所以我仍然無法避免爲不同的屏幕創建不同的佈局xml?只有在考慮小屏幕時,平板電腦纔不是解決方案的一部分,我清楚地知道我們需要爲移動設備和其他平板電腦創建其他佈局 –

+0

如果要創建高質量的應用程序,則可能必須創建不同的佈局和不同的drawables。但這一切都取決於您想要創建的內容:如果您正在討論創建遊戲,則某些遊戲進程(即AndEngine)可以自動縮放以適應屏幕。 – Mangusto

0

我會建議儘可能使用相對計算而不是絕對。避免爲填充,邊距等硬編碼的數字。簡單地給他們一個值與所需的屬性,如寬度,屏幕或任何組件的高度。

+0

所以你推薦在控制器中使用計算器?在渲染後如何調整視圖?你能提供一些鏈接或代碼示例嗎?謝謝 –

3

如果您使用「dp」構建視圖,它基本上與eack屏幕大小相同。
在大多數情況下,您更喜歡您的視圖會根據屏幕大小調整其大小。
當然,在大多數情況下,您需要爲平板電腦構建單獨的佈局。
但是,除了我可以推薦你做下面的步驟:

1.添加this庫到您的項目。

2.現在在你的佈局,你可以寫的看法那樣:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="I'm scalable!" 
    android:textSize="@dimen/_12sdp"/> 

在這個例子中你的TextView將規模上的每個屏幕尺寸。

+1

順便說一句, 如果你在每個文件中添加以下適當的值,你可以使用它來了解什麼預覽使用什麼dimen文件 values-sw #### dp