webview内 加载网页的字体 设置与app原生页面字体的不同

编程入门 行业动态 更新时间:2024-10-19 14:28:51

webview内 加载网页的<a href=https://www.elefans.com/category/jswz/34/1770720.html style=字体 设置与app原生页面字体的不同"/>

webview内 加载网页的字体 设置与app原生页面字体的不同

手机系统本身预置了不少字体,当然包括android原生的 4种。

android 原生控件设置字体可以用代码设置setTypeface ,或者xml 内设置font family 。

这里就需要主要到这两者的区别
差个前提知识,android实际是linux
① Android 系统的字体文件:位于 /system/fonts/ 文件夹下,我们可以到对应的目录下进行查看,可以看出,Android的字体文件都是ttf文件,

② 在/system/etc/目录下有两个字体配置文件,分别是system_fonts.xml 和 fallback_fonts.xml ,当系统需要加载字体时,会优先从 system_fonts.xml 文件开始查找,如果没有找到再进入 fallback_fonts.xml 查找。
而 typeface 是android 类,他会读取这些目录下的字体文件


生成font family name和 相应typeface 对象的映射 存于sSystemFontMap 内。这里可以看到android 原生默认的几种字体。不同手机还会有扩展。
通过反射可以拿到 该map内容
Field sSystemFontMap = null;
try {
sSystemFontMap = Typeface.class.getDeclaredField(“sSystemFontMap”);
sSystemFontMap.setAccessible(true);

		Object ss = sSystemFontMap.get(titleText.getTypeface());Map<String, Object> d = Util.change(ss);Log.e("wwww","titleText.getTypeface();"+d.size());} catch (NoSuchFieldException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}

public static HashMap<String, Object> change(Object parameter) {
HashMap<String, Object> hashmap = new HashMap<String, Object>();
Class clsHashMapKaTeX parse error: Expected '}', got 'EOF' at end of input: … { clsHashMapNode = Class.forName(“java.util.HashMap$Node”); //通过反射得到hashmap里面内部类node

Field[] fields = parameter.getClass().getDeclaredFields();
for (Field field : fields) {field.setAccessible(true);if (field.getName() == "table") {            //遍历属性,当时table属性时候Object[] node = (Object[]) field.get(parameter);   //得到table属性值for (Object object : node) {  //遍历if (object != null) {    //有可能table数组有node为空,因为hash值特性try {iteration(object, clsHashMap$Node,hashmap);   //递归} catch (NoSuchFieldException | SecurityException e) {e.printStackTrace();}}}}}} catch (ClassNotFoundException e) {e.printStackTrace();
} catch (IllegalAccessException e) {e.printStackTrace();
}return hashmap;

}
private static void iteration(Object object, Class clsHashMap$Node, HashMap<String, Object> hashmap) throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException {

	Field key = clsHashMap$Node.getDeclaredField("key");     //获取node类里面的key属性Field value = clsHashMap$Node.getDeclaredField("value");  //获取node类里面value属性Field next = clsHashMap$Node.getDeclaredField("next");   //获取node类里面next属性key.setAccessible(true);value.setAccessible(true);next.setAccessible(true);//得到三个属性的属性值String strkey = key.get(object).toString();Log.e("wwwww","strkey:"+strkey);Object objValue = value.get(object);Log.e("wwwww","objValue:"+objValue);Object objNext = next.get(object);//判断next是否为空,不为空则递归if(objNext==null){hashmap.put(strkey, objValue);}else{iteration(objNext, clsHashMap$Node, hashmap);}}

打印出来的字符内容。

一般在手机设置内 可以修改手机系统显示的字体,可以购买各种字体加入进去,这时手机的显示就变化了。app内原生的控件 会通过typeface 类加载了设置的默认字体。
但是webview 内的网页却由手机厂家不同 而有些变化有些没有变化。

从我们应用层的角度,webview设置字体的api 有

1、setStandardFontFamily(String font)
设置WebView标准字体库字体,默认字体“sans-serif”。
getSettings.setStandardFontFamily(“sans-serif”);
2、setFixedFontFamily(String font)
设置WebView固定的字体库字体,默认“monospace”。
getSettings.setFixedFontFamily(“monospace”);
3、setSansSerifFontFamily(String font)
设置WebView Sans SeriFontFamily字体库字体,默认“sans-serif”。
getSettings.setSansSerifFontFamily(“sans-serif”);
4、setSerifFontFamily(String font)
设置WebView seri FontFamily字体库字体,默认“sans-serif”。
getSettings.setSansSerifFontFamily(“sans-serif”);
5、setCursiveFontFamily(String font)
设置WebView字体库字体,默认“cursive”
getSettings.setCursiveFontFamily(“cursive”);
6、setFantasyFontFamily(String font)
设置WebView字体库字体,默认“fantasy”。
getSettings.setFantasyFontFamily(“fantasy”);

这里的入参都是font family name。如果想webview 内的网页也随当前系统的设置而变化,我得拿到当前默认的font family name。这就比较麻烦了,应用内都是typeface 对象,而该对象的font family name值也取不到,当前默认typeface是什么 也没有合适的api。如果自己随意设置一个font family name,如果当前系统内没有该字体也会不生效, 所以这里就被卡主了。
如果大家有什么建议能给我留言吗?

更多推荐

webview内 加载网页的字体 设置与app原生页面字体的不同

本文发布于:2024-02-11 11:15:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1680696.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字体   加载   页面   网页   webview

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!