在android中设置布局参数

使用XML文件很容易,因为我可以指定参数

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

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

 view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 

我看到我有一个选项,将其指定为相对布局,框架布局等。到目前为止,我正在使用线性布局的所有意见,如图像,文字和gridview。 应该根据父元素的布局来定义视图参数吗? 或者可以将其指定为线性布局,即使该视图是framelayout的子项? 对不起,但我无法找出差异。

Solutions Collecting From Web of "在android中设置布局参数"

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

ViewGroup类有两个静态内部类: LayoutParamsMarginLayoutParams 。 而ViewGroup.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根本就没有这些function。


所以一般来说,你必须使用LayoutParams来使你的视图正确定位和渲染。 但请注意,所有的LayoutParams都具有相同的父类ViewGroup.LayoutParams 。 如果只使用该类中定义的function(就像在你的情况下WRAP_CONTENTFILL_PARENT ),即使使用了错误的LayoutParams类来指定布局参数,也可以获得工作代码。

根据想要更改布局的视图数量,我认为最好创build一个辅助方法,并将要更改的所有视图以及要更改的高度和宽度值传递给方法:

 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的LayoutParamstypesvariables应该是您的视图返回的types。检查视图返回的是哪种types,并在导入语句中导入该types。