【问题标题】:Passing LayoutParams to ViewGroup not working将 LayoutParams 传递给 ViewGroup 不起作用
【发布时间】: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 作为高度和宽度。我的代码有什么问题?

【问题讨论】:

    标签: android viewgroup


    【解决方案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);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-30
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多