android滑动更改字体大小
需求:用户自定义apk字体大小
解决方法:
第一步:需要更改大小的字体布局设置大小android:textSize=“14sp”,
不需要更改大小的字体布局设置大小android:textSize=“14dp”,
第二步:在Constants中加入代码
public static double fontsize=1; //当前字体缩放大小
/**
* 将字符串数据保存到本地
*
* @param context 上下文
* @param filename 生成XML的文件名
*/
public static void saveSettingNote(Context context, String filename, Map<String, String> map) {
SharedPreferences.Editor note = context.getSharedPreferences(filename, Context.MODE_PRIVATE).edit();
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, String> entry = (Map.Entry<String, String>) it.next();
note.putString(entry.getKey(), entry.getValue());
}
note.commit();
}
/**
* 从本地取出要保存的数据
*
* @param context 上下文
* @param filename 文件名
* @param dataname 生成XML中每条数据名
* @return 对应的数据(找不到为NUll)
*/
public static String getSettingNote(Context context, String filename, String dataname) {
SharedPreferences read = context.getSharedPreferences(filename, Context.MODE_PRIVATE);
return read.getString(dataname, null);
}
用SharedPreferences存储字体大小数据,在apk卸载前会一直留着本地。
第三步:在BaseActivity中加入代码
//重写字体缩放比例 api<25
@Override
public Resources getResources() {
Resources res = super.getResources();
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) {
Constants.fontsize = Constants.getSettingNote(BaseActivity.this, "fontsize", "fontsize") == null ? 1 : Double.parseDouble(ConfigUtil.getSettingNote(BaseActivity.this, "fontsize", "fontsize"));
Configuration config = res.getConfiguration();
config.fontScale = (float) Constants.fontsize;//设置正常字体大小的倍数
res.updateConfiguration(config, res.getDisplayMetrics());
}
return res;
}
//重写字体缩放比例 api>25
@Override
protected void attachBaseContext(Context newBase) {