Android调用getWidth()或getHeight()获取视图尺寸为0的解决办法
程序员文章站
2022-07-14 17:40:51
...
最近在开发的时候碰到需要根据RecyclerView的尺寸动态设定RecyclerView视图内每个item的尺寸的问题
即使在我findById后调用getWidth()或getHeight()还是会有值为0的情况,只有在隔一段时间后再去获取才会获取到实际的值。
这个原因是因为View还没有绘制完成,可能你看到的是View已经显示了,可是获取View尺寸是在View绘制完成之前。
我总不能所有的都延迟个几百毫秒才去获取吧?
最后的解决办法,使用View.post,等到View绘制完成后才会走这里,就可以成功获取到尺寸,同时在这里设置adapter等需要用到尺寸的操作:
mView = findViewById(R.id.textview);
mView.post(new Runnable() {
@Override
public void run() {
@Override
public void run() {
Log.d("RecyclerViewWidth", String.valueOf(mView.getWidth()));
//设置
if (mView.getWidth() != 0) {
mViewWidth = mView.getWidth();
}
if (mView.getHeight() != 0) {
mViewHeight = mView.getHeight();
}
//Adapter里的onBindViewHolder里用到的mViewWidth和mViewHeight
adapter = new Adapter(activity, beanList);
mView.setLayoutManager(new GridLayoutManager(activity, 2));
mView.setAdapter(adapter);
}
}
});