将 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 LayoutParams

LayoutParams使用

测量规格说明书 MeasureSpec

Android M ClassCastException:FrameLayout$LayoutParams 无法转换为 WindowManager$LayoutParams

安卓编程 如何在Java代码里设置button的margin(外边距)?

LayoutParams