设备屏幕是恒定的,只有窗口容器才不恒定,而视图体系抛开设备无关宽度后还存在布局控件等 —— 意味着得到的值肯定不可能恒定,只取决于你的需求而已,你想想一下一个stack是被子控件撑开的,而子控件都没构建出来,你说怎么不为0。
问题已解决,可以使用view.post方法
要获取View的宽和高,必须待View已经测量完毕了,如果view还没有测量完成,获取到的宽高就是0。view的测量过程和Activity的生命周期不是同步的。所以在 Activity 的 onCreate 、 onStart、onResume 方法中获取View的宽高可能都为0。
下面四种方法都可以:
1.在Activity的 onWindowFocusChanged 方法中去获取。
2.通过 view.post() 将消息投递到消息队列尾部,等到处理该消息的时候,View也经济初始化好了。
3.使用ViewTreeObserver中的回调方法,当View状态发生变化时,都会回调。比如view从无到有。这个方法会回调多次。
4.view.measure(),这个方法实际就是手动调用view的测量方法,过程比较复杂,具体使用方法可以查看源码,或者查找其他相关资料。
4.