20210421日报

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方法;

原文地址:https://www.cnblogs.com/Clark-Shao/p/14908053.html