字體不隨系統的字體大小變化而變化

1、 APP字體大小,不隨系統的字體大小變化而變化的方法html

一、將字體大小的單位設置了dp,就能夠固定字體大小不隨系統設定的字號變化android

sp和dp很相似但惟一的區別是,Android系統容許用戶自定義文字尺寸大小(小、正常、大、超大等等),當文字尺寸是「正常」時1sp=1dp=0.00625英寸,而當文字尺寸是「大」或「超大」時,1sp>1dp=0.00625英寸。web

二、代碼設置(新)app

● 新建類MyContextWrapperide

import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.os.Build;
 import android.support.annotation.NonNull;
 import android.util.DisplayMetrics;
 
 public class MyContextWrapper extends ContextWrapper { 
     public MyContextWrapper(Context base) {
         super(base);
     }
     @NonNull
     public static ContextWrapper wrap(Context context) {
         Resources resources = context.getResources();
         Configuration newConfig = new Configuration();
         DisplayMetrics metrics = resources.getDisplayMetrics();
         newConfig.setToDefaults();
         //若是沒有設置densityDpi, createConfigurationContext對字體大小設置限制無效
        newConfig.densityDpi = metrics.densityDpi;
         if (Build.VERSION.SDK_INT > Build.VERSION_CODES.JELLY_BEAN_MR1) {
             context = context.createConfigurationContext(newConfig);
         } else {
            resources.updateConfiguration(newConfig, resources.getDisplayMetrics());
         }
        return new MyContextWrapper(context);
     }
 }
複製代碼

● 在全部Activity(BaseActivity)添加佈局

@Override
 protected void attachBaseContext(Context newBase) {
     super.attachBaseContext(MyContextWrapper.wrap(newBase));
 }
複製代碼

updateConfiguration 設置會對其餘Activity也有效。 createConfigurationContext 自對當前Activity有效。字體

三、代碼設置(過期)ui

1)在Application中加入spa

private void setTextDefault() {
     Resources res = super.getResources();
     Configuration config = new Configuration();
     config.setToDefaults();
     res.updateConfiguration(config, res.getDisplayMetrics());
 }
複製代碼

缺點:若是home出來,更改了字體大小,字體仍是會改變。徹底退出應用在進去,字體纔會改成默認大小。code

2)在全部Activity 中加入,改變字體大小能及時還原默認大小。

@Override
 public Resources getResources() {
  Resources resources = super.getResources();
  if (resources.getConfiguration().fontScale != 1) {
     Configuration newConfig = new Configuration();
     newConfig.setToDefaults();
     resources.updateConfiguration(newConfig, resources.getDisplayMetrics());
  }
  return resources;
 }
複製代碼

2、WebView 顯示html 字體大小不隨系統變化

webSettings.setTextZoom(100);//防止系統字體大小影響佈局

相關文章
相關標籤/搜索