在編寫自定義控件的時候,由於我的控件全部採用的是代碼編寫界面,在通過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);