android在java代碼中處理像素適配和國際化適配的問題

    首先解釋下文章標題: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代碼中動態的控制這個控件的寬度。

發佈了29 篇原創文章 · 獲贊 7 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章