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

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

【获取系统字体】参考此文【http://blog.youkuaiyun.com/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;

咕噜咕噜哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值