网易 - 动态换肤答疑

  • 作者:彭老师
  • 日期:2019-07-17
  • 类型:Android
  • 说明:本文源于彭老师手写摘要,如需转载请带上链接或注明出处!

重要的事情说三遍:皮肤包项目打包出来的apk,请放在模拟器或真机存储中!


网易1901班:杭州wind、深圳-4-张小凡、杭州-5-陈旦锋、上海-4-许昭、广州-3-吕仲熙、深圳-5-willem、深圳-3-莫问

1、CustomXXX可以不继承父类(目的只为了截取控件)
2、onCreateView方法执行了两次:
从setContentView()跟进去:
LayoutInflater 492 - 730 - 772 执行了一次
LayoutInflater 515 - 824 - 863 - 730 - 772 又执行了一次
3、最终创建控件在这里:


网易1901班:成都-4年-刘金伟

1、如果打出来的皮肤包删除了classes.dex文件,在load的时候会找不到包名

答:可删除classes.dex,但至少保留:AndroidManifest.xml、resources.arsc、res/xxx
很多同学把皮肤包解压成文件夹再删除,最后用压缩软件“还原”皮肤包。千万别这样做!
正确姿势:解压软件打开皮肤包,删除文件即可,不要解压成文件夹删文件

TextView tv = findViewById(R.id.xxx);
tv.setBackgroundColor(Color.RED);
2、截取的控件和此处控件内存地址一致,是否同一个控件?

答:目前场景确实是同一个控件,代码如下:

/**
* @param id the id of the view to be found
* @return the view of the specified id, null if cannot be found
* @hide
*/
protected <T extends View> T findViewTraversal(@IdRes int id) {
if (id == mID) {
return (T) this;
}
return null;
}
3、此处设置背景资源是否生效?

答:内置资源可以生效,皮肤包不可以,参考核心代码!

更多技术内幕请关注:网易云课堂 - 微专业 - 安卓高级开发工程师