最近發(fā)現(xiàn)如果將手機系統(tǒng)的字體設(shè)置為大字體,應(yīng)用中的字體將跟隨系統(tǒng)變大,而布局大部分我們根據(jù)設(shè)計出圖寫死了大小,這就會導(dǎo)致文字顯示不全。
究其原因到底是因為什么呢?
Google了一下,發(fā)現(xiàn)原來我們?yōu)樽煮w設(shè)置的大小為SP,而SP,不僅根據(jù)像素進(jìn)行改變,還會根據(jù)系統(tǒng)設(shè)置的大小而改變,所以如果我們布局寫死的地方,可以將字體的大小也設(shè)置位dp。
但是估計等我們發(fā)現(xiàn)這個問題的時候,我們的應(yīng)用可能已經(jīng)完成或者已經(jīng)進(jìn)行了一大部分了,那么怎么解決這個問題呢?
看大家的編碼習(xí)慣了,如果你的應(yīng)用進(jìn)行了抽取,所有的Activity,都繼承抽取出來的BaseActivity的話那么添加如下代碼,即可解決上述問題。
@Override
public Resources getResources() {
// 字體大小不跟隨系統(tǒng)
Resources res = super.getResources();
Configuration config = new Configuration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
return res;
}
原理其實很簡單,在android中控制字體大小的是Configuration類中的fontScale屬性,其默認(rèn)值為1,會隨系統(tǒng)調(diào)節(jié)字體大小而發(fā)生變化,我們強制讓其等于默認(rèn)值,就可以實現(xiàn)字體不隨調(diào)節(jié)改變。
如果沒有抽取的話,??那你就在每個Activity中去重寫這個方法吧,或者,趕緊開始抽取你們的基類吧!