首先解釋下文章標題:android在處理國際化適配或者機型適配時有自己的邏輯,利用res裏面的文件夾處理這種變化,比如values中存放默認的資源(英文資源),values-zh-rCN中存放中文資源,values-es-rES中存放西班牙語資源,又或者是xml中存放默認的英文資源,xml-zh-rCN存放中文資源,xml-es-rES存放西班牙語資源,這樣的機制在大部分情況下都可以處理各種問題,只需要在xml文件中引用資源id,android系統會自動處理。
但是本篇文章說的是上述android機制處理不了的情況,如果你的xml規定比較嚴格,或者不方便修改,或者代碼耦合性太高,總之就是各種意外的情況導致你會想到如何在java代碼中動態的控制這些View的屬性,同時還需要滿足適配的需求,這就是我要說的內容:
首先需要在value文件夾下的dimens.xml中的resources的子資源中添加如下代碼:
<item name="container_left" format="float" type="dimen">474</item>然後你就可以在其他國際化資源中添加相同的內容了,只不過是對應的值不同。
比如在value-zh-rCN文件夾下的dimens.xml中的resources的子資源中添加:
<item name="container_left" format="float" type="dimen">324</item> 其餘類似。 然後就就是在java代碼中編寫相匹配的代碼了:
ViewGroup container = getContainer();//container就是控件 ViewGroup.LayoutParams containerParams = container.getLayoutParams(); TypedValue outValue = new TypedValue(); mContext.getResources().getValue(R.dimen.container_left, outValue, true);//mContext是自己傳的context對象 containerParams.width = (int) outValue.getFloat(); container.setLayoutParams(containerParams); 另外爲了更容易理解,我把xml也貼上: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/tab_container" android:layout_width="216dp" android:layout_height="match_parent" android:orientation="vertical"> </LinearLayout> 就是說可以在java代碼中動態的控制這個控件的寬度。