我正在尝试以编程方式设置布局宽度。
ViewTreeObserver vtoRecyclerView = mMainLayout.getViewTreeObserver();
vtoRecyclerView.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mMainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
ViewGroup.LayoutParams lpView = mMainLayout.getLayoutParams();
lpView.width = ViewGroup.LayoutParams.MATCH_PARENT-20;
mMainLayout.requestLayout();
}
});
但是mMainLayout.getLayoutParams()
将宽度返回为-1 。所以当我将 width设置为match_parent - 20 时,它变为 -21 。我想将width
设置为 match_parent
- 20 。
这种方法有什么问题。
答案 0 :(得分:4)
此处代码的根本问题是因为您将宽度设置为:
lpView.width = ViewGroup.LayoutParams.MATCH_PARENT-20;
而ViewGroup.LayoutParams.MATCH_PARENT是常量。 您可以在ViewGroup类上找到常量
public static final int MATCH_PARENT = -1;
这很明显,因为-1 - 20是-21
您可以在这里做的是,您可以将行更改为
lpView.width = mMainLayout.getWidth()-20;
答案 1 :(得分:1)
试试这个。
DisplayMetrics displaymetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int height = displaymetrics.heightPixels;
int width = displaymetrics.widthPixels;
ViewTreeObserver vtoRecyclerView = mMainLayout.getViewTreeObserver();
vtoRecyclerView.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mMainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
ViewGroup.LayoutParams lpView = mMainLayout.getLayoutParams();
lpView.width = width -20;
mMainLayout.requestLayout();
}
});
答案 2 :(得分:0)
试试这个。
ViewTreeObserver vtoRecyclerView = mMainLayout.getViewTreeObserver();
vtoRecyclerView.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
if(mMainLayout.getWidth > 10 && mMainLayout.getHeight() > 10) // you can modify this value.
{
mMainLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this);
ViewGroup.LayoutParams lpView = mMainLayout.getLayoutParams();
lpView.width = ViewGroup.LayoutParams.MATCH_PARENT-20; // This seems to be wrong;
ViewParent parent = mMainLayout.getParent();
if(parent != null) {
lpView.width = (View)parent.getWidth();
}
mMainLayout.requestLayout();
}
}
});
答案 3 :(得分:0)
将宽度设置为match_parent时遇到了同样的问题,我通过获取手机屏幕宽度解决了这个问题:
Display display = ((Activity) context).getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int ActualWidth=width-(`margin you set for view`);
希望它会有所帮助:)
答案 4 :(得分:0)
由于ViewGroup.LayoutParams.MATCH_PARENT
常量预定义数值为-1
,因此您获得-21
作为结果。您可以通过将margin
定义为布局而不是使用该方法来实现您的目标。