将 LayoutParams 传递给 ViewGroup 不起作用
Posted
技术标签:
【中文标题】将 LayoutParams 传递给 ViewGroup 不起作用【英文标题】:Passing LayoutParams to ViewGroup not working 【发布时间】:2012-09-05 23:01:29 【问题描述】:我有自己的布局
public class MyLayout extends ViewGroup
在那个布局里面我放了一些按钮。这很好用。但我尝试添加 LayoutParams
ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(80, 80);
Button btn = new Button(getActivity());
btn.setLayoutParams(params);
myLayout.addView(btn);
并在 MyLayout 中访问它
View child = getChildAt(i);
ViewGroup.LayoutParams params = child.getLayoutParams();
我只看到 0 作为高度和宽度。我的代码有什么问题?
【问题讨论】:
【参考方案1】:尝试在 MyLayout
类中创建自己的 LayoutParams
。
类似这样的:
public static class LayoutParams extends ViewGroup.LayoutParams
int x;
int y;
public LayoutParams(Context context, AttributeSet attrs)
super(context, attrs);
public LayoutParams(int w, int h)
super(w, h);
那么你需要重写MyLayout
类中的以下方法:
@Override
protected boolean checkLayoutParams(ViewGroup.LayoutParams p)
return p instanceof LayoutParams;
@Override
protected LayoutParams generateDefaultLayoutParams()
return new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
@Override
public LayoutParams generateLayoutParams(AttributeSet attrs)
return new LayoutParams(getContext(), attrs);
@Override
protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p)
return new LayoutParams(p.width, p.height);
【讨论】:
以上是关于将 LayoutParams 传递给 ViewGroup 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Android M ClassCastException:FrameLayout$LayoutParams 无法转换为 WindowManager$LayoutParams