Android RecyclerView:使用 "match_parent" 获得 width/height 的视图
Android RecyclerView: getting width/height of View with "match_parent"
我有一个包含一些视图的布局,我需要根据一些参数更改大小,这些参数取决于视图的宽度。宽度设置为 "match_parent"。所以当我尝试获得它的宽度时 returns 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();
}
});
所以我的问题是在这种情况下如何获得宽度?
谢谢。
在四处挖掘之后,我找到了一个解决方案来回答我的问题,但有一个主要问题我还没有解决。我们可以使用每个 View 都有的方法 post()
并向消息队列添加一个 Runnable。据我了解,在方法 post()
中完全测量 View 后会发生什么,我们可以获得我们需要的尺寸,如下所示:
holder.button.post(new Runnable() {
@Override
public void run() {
width = holder.button.getWidth();
}
});
然而,这里的问题是 RecyclerView 不会等到此视图被测量为并将转到下一行,并且不会根据您期望的测量更新行。
如果无论如何有办法解决这个问题,请发表评论。谢谢。
我有一个包含一些视图的布局,我需要根据一些参数更改大小,这些参数取决于视图的宽度。宽度设置为 "match_parent"。所以当我尝试获得它的宽度时 returns 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(); } });
所以我的问题是在这种情况下如何获得宽度? 谢谢。
在四处挖掘之后,我找到了一个解决方案来回答我的问题,但有一个主要问题我还没有解决。我们可以使用每个 View 都有的方法 post()
并向消息队列添加一个 Runnable。据我了解,在方法 post()
中完全测量 View 后会发生什么,我们可以获得我们需要的尺寸,如下所示:
holder.button.post(new Runnable() {
@Override
public void run() {
width = holder.button.getWidth();
}
});
然而,这里的问题是 RecyclerView 不会等到此视图被测量为并将转到下一行,并且不会根据您期望的测量更新行。 如果无论如何有办法解决这个问题,请发表评论。谢谢。