1. 程式人生 > >使用TypedArray設定控制元件大小注意問題

使用TypedArray設定控制元件大小注意問題

在編寫自定義控制元件的時候,由於我的控制元件全部採用的是程式碼編寫介面,在通過TypeArray獲取文字大小的時候,介面顯示的與設定的明顯不一樣,具體的圖片演示我就不貼圖可以檢視http://blog.csdn.net/yangzl2008/article/details/7879019?utm_source=tuicool&utm_medium=referral ,這個也是描述一樣的問題,但是沒有給出解決方法。

下面是我的基本配置

<dimen name="skin_blue_dialog_title_size">18sp</dimen>
float dialog_title_size = appearance.getDimension(attr, 18);
centerTitle.setTextSize(dialog_title_size);
通過介面檢視基本上擴大了將近一倍,然後檢視列印值也確實跟介面顯示的差不多,檢視setTextSize原始碼
 @android.view.RemotableViewMethod
    public void setTextSize(float size) {
        setTextSize(TypedValue.COMPLEX_UNIT_SP, size);
    }
可以看到TypedValue.COMPLEX_UNIT_SP,也就是說size是sp型別的,而getDimension最後給出的是px,導致getDimension之後再setTextSize時size又再次乘了density最終導致顯示異常,所以在自定義佈局設定size的時候不能使用預設的setTextSize(int size)而應該採用
float dialog_title_size = appearance.getDimension(attr, 18);
centerTitle.setTextSize(TypedValue.COMPLEX_UNIT_PX, dialog_title_size);