項(xiàng)目開發(fā)中使用如下代碼動(dòng)態(tài)設(shè)置TextView字體大小耐版,發(fā)現(xiàn)設(shè)置的字體和預(yù)期差別很大离唐。
errText.setTextSize(context.getResources().getDimensionPixelSize(R.dimen.lost_text_size));
查看源碼才發(fā)現(xiàn)setTextSize(float size)的默認(rèn)大小單位是sp,所以通過該方法設(shè)置的文本大小和在布局中通過android:textSize屬性設(shè)置的文本大小不一致糜芳。相關(guān)源碼如下:
通過源碼我們看到TextView提供了另外一個(gè)通過指定單位設(shè)置字體大小的方法:public void setTextSize(int unit, float size)
第一個(gè)參數(shù)的可選單位值可以是:
TypedValue.COMPLEX_UNIT_PX : Pixels
TypedValue.COMPLEX_UNIT_SP : Scaled Pixels
TypedValue.COMPLEX_UNIT_DIP : Device Independent Pixels
可以根據(jù)在資源中定義的不同尺寸選擇合適的單位格式年鸳,這樣,就能在代碼中設(shè)置和布局中相同大小的文本匾荆。
最終正確的在代碼中設(shè)定方法如下:errText.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimensionPixelSize(R.dimen.lost_text_size));