1. 程式人生 > >動態程式碼設定Textview的字型大小,引用Dimen資源

動態程式碼設定Textview的字型大小,引用Dimen資源

xml檔案設定Textview字型大小,可直接設定
android:textSize="@dimen/common_font_sw320dp_of_13"

但是通過動態程式碼設定時,通常會遇到引用Dimen檔案失效或者文字大小異常的狀況,例如下面這2種方式都不對

tvHaveStockAt.setTextSize(context.getResources().getDimension(R.dimen.common_sw320dp_of_8));
tvHaveStockAt.setTextSize(R.dimen.common_sw320dp_of_8);

正確的方式應該設定TypedValue為sp,然後引用Dimen檔案裡的想引用的sp數值,如果不設定TypedValue為sp,則文字顯示異常過大,應該是將sp轉換成了px導致的。有效方式:
tvHaveStockAt.setTextSize(TypedValue.COMPLEX_UNIT_PX,
                    context.getResources().getDimension(R.dimen.common_font_sw320dp_of_9));

或者可以試試將px轉換成sp的方式,不過此種方式還暫未測試。
/**  
     * 根據手機的解析度從 dp 的單位 轉成為 px(畫素)  
     */    
    public  int dipTopx(Context context, float dpValue) {    
        final float scale = context.getResources().getDisplayMetrics().density;    
        return (int) (dpValue * scale + 0.5f);    
    }    
     
    /**  
     * 根據手機的解析度從 px(畫素) 的單位 轉成為 dp  
     */   
    public int pxTodip(Context context, float pxValue) {    
        final float scale = context.getResources().getDisplayMetrics().density;    
        return (int) (pxValue / scale + 0.5f);    
    }