2014-02-28 25 views
3

我想讓我的android應用程序支持多種屏幕尺寸。我試圖通過使用不同的dimens.xml文件更改佈局的dp值來將我的替代佈局降至最低。Android - dimens.xml文件的別名?

蹩腳的部分是,我有9個不同的文件夾,其中包含維度文件(values,values-sw320dp,values-sw480dp,values-sw600dp和values-sw720dp for higher apis,values-small,values-normal,values -large,爲舊的apis設置values-xlarge),並且我討厭從我的sw值文件夾複製粘貼到舊值文件夾中。

我知道如何創建layout.xml文件別名like this shows,但有誰知道你是否可以爲dimens文件做到這一點?我嘗試在我的values.xml中創建多個維度文件,但當然不起作用,因爲那時我的兩個維度文件具有相同名稱的屬性,並導致衝突。

我可以在values-sw600dpdimens-large.xml中命名我的維度文件並在values-large文件夾中引用它?

+1

這是我沒有嘗試的東西,但大多數編譯器和IDE都有一個地方來配置一些自定義生成步驟。也許你可以創建一個複製文件的小腳本,然後將此腳本作爲構建步驟添加。您的腳本將在您每次構建項目時執行。 – Merlevede

回答

0

我最終使用了Merlevede的建議,並在eclipse的構建路徑中添加了一個腳本。

具體來說,選擇Android項目,選擇項目 - >屬性 - >建築工地 - >新

做一個「程序」生成器,然後選擇一個文件,是文件系統上本地執行。就我個人而言,我寫了一個3行的java應用程序,震驚了,然後寫了一個只調用java jar的批處理文件。批處理文件就是我爲構建器指定的可執行文件。

然後我把那個構建器放到構建列表的頂部,瞧,我的文件被自動複製了!

1

您可以動態更改佈局組件的大小。 在這裏,我正在根據480 * 854大小的屏幕創建第一個xml佈局。下面的代碼根據屏幕大小自動適合UI。

int width = 0; 
int height = 0; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    super.onCreate(savedInstanceState); 

    getTheDisplay(); 
    getUiComponents(); 
    adjustUIComponents(); 

}private void getTheDisplay() { 

    DisplayMetrics dm = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(dm); 
    width = dm.widthPixels; 
    height = dm.heightPixels; 

}private void adjustUIComponents() { 
    // myButton is button from layout xml file 
    adjustUI(myButton); 

}private void adjustUI(View v) { 
    //myButton is in LinearLayout 
     LinearLayout.LayoutParams(android.widget.LinearLayout.LayoutParams)v.getLayoutParams(); 
    lp.width = calculateWidth(211);//211 is width of button in px given in xml 
    lp.height = calculateHeight(80);//80 is height of button in px given in xml 

    v.setLayoutParams(lp); 
}private int calculateWidth(int w) { 
    int wi = (w * width)/480; 
    return wi; 
} 

private int calculateHeight(int h) { 
    int hi = (h * height)/854; 
return hi; 
} 
+0

+1,但我不認爲這被認爲是最佳實踐,它仍然是相當複雜的,同時減少我的細粒度控制選項。 – CorayThan