在android中设置布局参数

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

 

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

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

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

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

所有布局类( 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相同:它可以将abovebelow值, alightWithParent与每个视图相关联。 并且LinearLayout.LayoutParams根本没有这些function。


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

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

 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,并在import语句中导入该types。