一、问题:自定义控件和原生TextView中都设置字体大小为10sp,为什么显示的差异会这么大?
二、剖析:(1)经过debug发现,设置的10sp,到后台后变成了30;手机是1080*1920的,所以在这里已经是被转成像素后的大小。
对分辨率及比例不是很了解的,可以简单参考下图:
(2)为什么原生TextView不会有问题呢?于是就跟了下TextView的源码,发现: private void setRawTextSize(float size) {
if (size != mTextPaint.getTextSize()) {
mTextPaint.setTextSize(size);
if (mLayout != null) {
nullLayouts();
requestLayout();
invalidate();
}
}
}
三、解决:最后是设置的Paint的大小,于是做如下修改: textView.setText(text);
// textView.setTextSize(textSize);
textView.getPaint().setTextSize(textSize);
效果图:
private void setRawTextSize(float size) {
if (size != mTextPaint.getTextSize()) {
mTextPaint.setTextSize(size);
if (mLayout != null) {
nullLayouts();
requestLayout();
invalidate();
}
}
}
textView.setText(text);
// textView.setTextSize(textSize);
textView.getPaint().setTextSize(textSize);