学习进度10
1、直接继承View的自定义控件需要重写onMeasure方法并设置wrap_content时的自身大小,否则在布局中使用wrap_content时就相当于使用match_parent。
2、在Activity的onCreate、onStart、onResume方法中均无法正确得到某个View的宽/高信息,这是因为View的measure过程和Activity的生命周期方法不是同步执行的,因此无法保证Activity执行了onCreate、onStart、onResume时某个View就已经测量完毕了,如果View还没有测量完毕,那么获得的宽/高就是0。
可以通过如下四个方法来解决获取View宽/高为0的问题:
-
在Activity/View的onWindowFocusChanged方法(View已经初始化完毕了,宽/高已经准备好了)中获取View的宽高;
-
在view.post(runnable)方法(将runnable投递到消息队列的尾部,等待Looper调用此runnable的时候,View也已经初始化好了)中获取View的宽高;
-
使用ViewTreeObserver;
-
手动调用View的measure方法;
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步