使用TypedArray設定控制元件大小注意問題
阿新 • • 發佈:2019-01-04
在編寫自定義控制元件的時候,由於我的控制元件全部採用的是程式碼編寫介面,在通過TypeArray獲取文字大小的時候,介面顯示的與設定的明顯不一樣,具體的圖片演示我就不貼圖可以檢視http://blog.csdn.net/yangzl2008/article/details/7879019?utm_source=tuicool&utm_medium=referral ,這個也是描述一樣的問題,但是沒有給出解決方法。
下面是我的基本配置
<dimen name="skin_blue_dialog_title_size">18sp</dimen>
通過介面檢視基本上擴大了將近一倍,然後檢視列印值也確實跟介面顯示的差不多,檢視setTextSize原始碼float dialog_title_size = appearance.getDimension(attr, 18); centerTitle.setTextSize(dialog_title_size);
@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);