做android开发,最另程序员头疼的事莫过于适配了,费时费力,仍不能兼顾所有机型;本人所在公司希望能
根据一套设计图(以ios为标准),在各分辨率设备上按宽度比例(高度也按宽度比例)缩放,之前用dp单位写布局
坐标,希望能自适应,很遗憾...;后来就试图在布局里直接写绝对坐标(px),再通过在程序中动态计算坐标进行
缩放,刚开始通过findViewById()找到使用绝对坐标的view,再做缩放,可以想想其效率和工作量...;出于程序员的
“惰性”,通过查看sdk源码,找到以下解决方案,进入正题:
取得缩放比例不难,随后上代码,要使整个视图层级全部进行缩放,就必须取得层级中的各个对象,但是sdk
提供给开发者拿子视图的方法,只有findViewById(),findViewByTag(),直接pass;在这种具有层次的结构中遍历所有
对象,很容易想到递归,遗憾的是google没有提供取得子View的方法;通过观察API,所以视图容器都继承了
ViewGroup,再看ViewGroup的源码,他有一个私有成员变量:private View[] mChildren; 就是它了,(还没理解
google为什么不提供访问它的接口),访问私有变量,自然还得是java的反射机制了,这便是关键,看代码: