您的位置:首页 > 移动开发 > Android开发

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

2015-10-21 11:57 567 查看
【反射机制】参考此文【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;
咕噜咕噜哈哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android