在android中设置布局参数

时间:2011-06-23 12:20:29

标签: android android-layout layoutparams

使用XML文件很简单,因为我可以将参数指定为

<android:layout_width="fill_parent" android:layout_height="wrap_content">

但是我在通过代码指定它时感到困惑。对于每个视图,我使用

指定参数
view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 

我看到我可以选择将其指定为相对布局,框架布局等。 截至目前,我正在为所有视图使用线性布局,例如图像,文本和gridview。是否应根据父元素的布局定义视图参数?或者将它指定为线性布局是否可以,即使视图是例如framelayout的子节点?对不起,但我找不到区别。

2 个答案:

答案 0 :(得分:17)

所有布局类(LinearLayoutRelativeLayout等)都会扩展ViewGroup

ViewGroup类有两个静态内部类:LayoutParamsMarginLayoutParamsViewGroup.MarginLayoutParams实际上延伸了ViewGroup.LayoutParams


有时布局类需要额外的布局信息才能与子视图相关联。为此,他们定义了内部静态LayoutParams类。例如,LinearLayout有:

public class LinearLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

RelativeLayout同样如此:

public class RelativeLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}

LinearLayout.LayoutParamsRelativeLayout.LayoutParams是完全不同的独立类。它们存储有关子视图的不同附加信息。

例如,LinearLayout.LayoutParams可以将weight值与每个视图相关联,而RelativeLayout.LayoutParams则不能。与RelativeLayout.LayoutParams相同:它可以将abovebelowalightWithParent等值与每个视图相关联。并且LinearLayout.LayoutParams根本没有这些能力。


因此,通常,您必须使用封闭布局中的LayoutParams来正确定位和渲染视图。但请注意,所有LayoutParams都有相同的父类ViewGroup.LayoutParams。如果您只使用该类中定义的功能(例如您的WRAP_CONTENTFILL_PARENT),即使使用了错误的LayoutParams类来指定布局参数,您也可以获得正常工作的代码

答案 1 :(得分:10)

根据您想要更改布局的视图数量,我认为最好创建一个辅助方法并将您想要更改的任何视图传递给方法以及您希望它们更改为的高度和宽度值:

public void setWidthHeight(View v, int width, int height){
    LayoutParams lp;
    lp = v.getLayoutParams();
    lp.width = width;
    lp.height = height;
    v.setLayoutParams(lp);
}

请记住,此处设置宽度和高度不会与xml中的相同值匹配,即android:layout_width =“32dp”与lp.width = 32不相同;

另外,名为lp的LayoutParams类型变量应该是视图返回的类型...检查视图返回的类型并在import语句中导入该类型。