2012-09-27 22 views
4

爲了支持不同的分辨率,我們需要對Supporting Multiple Screens中描述的佈局文件做出很好的變化。假設你不打算顯示你的用戶界面的不同安排,但只是想適當地伸展,你的變化將主要是關於不同的權重。至少目前爲止,我的應用就是這種情況。Android - 您如何根據DRY原則管理多個佈局文件?

現在,你如何管理改變這種結構的應用程序?由於它多次重複佈局,應用程序中的一個佈局更改會導致多個文件更改。

我想到了兩個選項:

  1. 在你的代碼
    • 缺點是你的佈局相關的工作被波及到的代碼動態變化的值。我真的不喜歡這個。
  2. 使子佈局的提取常用的佈局元素
    • 負面影響是你佈局的層次會更深和雜亂所以這將是很難搞清楚是怎麼回事。不過,由於Hierarchy Viewer,這比#1選項要好。我不確定這種方法是否總是可以實現的。

如果你可以分享你的技巧,通過它來獲取,這將是大加讚賞。

回答

1

我想我找到了解決方案。如果別人贊成,我會接受它作爲答案。

我發現Supporting Multiple Screens中描述的配置限定符不僅適用於res/drawableres/layout,也適用於res/values。所以,在我的layout/some_layout.xml,我這樣說:

<ImageButton 
    android:id="@+id/imagePlay" 
    android:layout_width="@dimen/button_size" 
    android:layout_height="@dimen/button_size" 
    android:scaleType="fitCenter" 
    android:src="@drawable/play" /> 

然後在values/layout.xml文件定義默認button_size

<resources> 
    <dimen name="button_size">44dp</dimen> 
</resources> 

而且在values-xlarge/layout.xml文件定義的XLARGE模式button_size

<resources> 
    <dimen name="button_size">66dp</dimen> 
</resources> 

我沒有嘗試其他values資源,但我認爲它也適用於Styles and Themes因此,如果您的佈局定製比尺寸或重量稍大一點,您可以在值中定義樣式並使用它。

+0

我覺得這個解決方案看起來比許多佈局的應用程序複雜。對於佈局中的每個值,您必須指定一個「變量」,這對於調試來說似乎相當混亂。但是,讓我們聽聽其他人的想法! – antoniom

+0

@antoniom你說這個「變量」是正確的。我想知道你的擔心是否可以通過適當的命名實踐來緩解。您可以使用一個值xml文件來保留像按鈕大小這樣的常見元素,然後每個佈局文件爲一個值xml文件,並將值xml文件名設置爲'values \ layout _ *。xml'。數值名稱最好以'layout_ *'開始,因爲'R'不能讓你按照文件名去。你不必把所有的東西都定義爲變量,所以我期望這些'layout _ *。xml'文件很小。我錯過了一個你特別想到的場景嗎? – kennethc

+0

這對我來說很好。接受這個答案 - 希望這將有助於其他人在未來,或其他人會注意到更好的方式來做到這一點。 – kennethc