通过反射机制获得系统字体Size【ActivityManagerNative无法调用问题】

来源:互联网 发布:淘宝网宝宝学步鞋 编辑:程序博客网 时间:2024/06/05 06:02

【反射机制】参考此文【http://blog.csdn.net/coolcoffee168/article/details/5835143】     一

【获取系统字体】参考此文【http://blog.csdn.net/chr8880/article/details/8021237】      二

【参考文】【http://jaymsimusic.iteye.com/blog/781439】      三


在学习中遇到一个问题,需要获取系统字体大小,也就是  【设置-显示-字体大小】中设置的大小,网上搜索通过参考顶部【二】文,得知要用到ActivityManagerNative这个类的方法,但是这个类是hide的,再搜索通过文【三】得知需要用到Java中的反射机制,最后通过参考文【一】学习反射机制得以解决,感谢上面的几篇参考文档,现在记录下来如下:


case R.id.btn_fontSize:             // 获取系统字体大小             try {                 Configuration mCurConfig = new Configuration();                 // 获取ActivityManagerNative类的对象activityManagerNative                 Class<?> activityManagerNative = Class.forName("android.app.ActivityManagerNative");                 /*                  * 获得可调用getConfiguration方法的对象oam(调用 getDefault方法得到的东西)                  * getMethod:获取AMN类中的getDefault方法                  * invoke:通过activityManagerNative对象调用getDefault方法                  */                 Object oam = activityManagerNative.getMethod("getDefault")                         .invoke(activityManagerNative);                 // 获取getConfiguration方法并通过oam对象调用,得到 config对象                 Object config = oam.getClass().getMethod("getConfiguration")                         .invoke(oam);                 mCurConfig.updateFrom((Configuration) config);                 fontSizeTv.setText(mCurConfig.fontScale + "");             } catch (ClassNotFoundException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (IllegalAccessException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (IllegalArgumentException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (InvocationTargetException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             } catch (NoSuchMethodException e) {                 // TODO Auto-generated catch block                 e.printStackTrace();             }             break;

咕噜咕噜哈哈哈

0 0