欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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);
         }
    }
});

 

相关标签: Android