Android字体适配⽅案
开发过程中,按照UI设计尺⼨做好UI页⾯,当⽤户⾃定义⾃⼰的⼿机字体⼤⼩之后UI完全没法看了,这个时候就在想让app字体⼤⼩始终⼀致就好了
下⾯看⼀下,出现的问题和解决⽅案
做个简单的例⼦,先验证⼀下:
同样的布局代码
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Hello World! in SP" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18dp"
android:text="Hello World! in DP" />
调节设置中显⽰字体⼤⼩
运⾏后显⽰样式
回到标题要解决的问题,如果要像⼀样,所有字体都不允许随系统调节⽽发⽣⼤⼩变化,要怎么办呢?利⽤Android的Configuration类中的fontScale属性,其默认值为1,会随系统调节字体⼤⼩⽽发⽣变化,如果我们强制让其等于默认值,就可以实现字体不随调节改变,在⼯程的Application或BaseActivity中添加下⾯的代码:
解决⽅案:
//字体适配解决⽅案
@Override
public void onConfigurationChanged(Configuration newConfig) {
if (newConfig.fontScale != 1)//⾮默认值
getResources();
}
@Override
public Resources getResources() {
Resources res = Resources();
if (Configuration().fontScale != 1) {//⾮默认值
Configuration newConfig = new Configuration();
newConfig.setToDefaults();//设置默认
res.updateConfiguration(newConfig, DisplayMetrics());
}
return res;
}
总结:
android layout布局⼀是布局宽⾼固定的情况下,字体单位改⽤dp表⽰;
注意,如果使⽤的sp,还是会随⽤户的字体⼤⼩的改变⽽改变,所以这⾥使⽤dp设置
⼆是通过3中的代码设置应⽤不能随系统调节,在检测到fontScale属性不为默认值1的情况下,强⾏进⾏改变。