我有一些带有一些视图的布局,我需要根据一些参数来改变大小,这取决于View的宽度。宽度设置为“match_parent”。因此,当我尝试获得宽度时,它返回0.这是我到目前为止所尝试的:
mask.getWidth();
mask.getLayoutParams().width
ViewTreeObserver vto = mask.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mask.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = mask.getMeasuredWidth();
}
});
所以我的问题是如何在这种情况下获得宽度? 谢谢。
答案 0 :(得分:1)
在挖掘之后,我找到了一个解决我的问题的解决方案,但有一个我还没有解决的重大问题。我们可以使用每个View都有的方法post()
,并将Runnable添加到消息队列中。因此,据我所知,在方法post()
中完全测量View后,我们可以获得我们需要的维度:
holder.button.post(new Runnable() {
@Override
public void run() {
width = holder.button.getWidth();
}
});
然而,问题在于RecyclerView不会等到这个视图被测量为,并且将进入下一行,并且不会根据您期望的度量更新行。 如果无论如何都有办法解决这个问题,请发表评论。谢谢。