在android中设置布局参数

Jer*_*rge 16 android android-layout layoutparams

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

<android:layout_width="fill_parent" android:layout_height="wrap_content">
Run Code Online (Sandbox Code Playgroud)

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

view.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT)); 
Run Code Online (Sandbox Code Playgroud)

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

ina*_*ruk 18

所有布局类(LinearLayout,RelativeLayout等)延伸ViewGroup.

ViewGroup类有两个静态内部类:LayoutParamsMarginLayoutParams.而ViewGroup.MarginLayoutParams实际上是扩展了ViewGroup.LayoutParams.


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

public class LinearLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}
Run Code Online (Sandbox Code Playgroud)

同样的事情RelativeLayout:

public class RelativeLayout extends ViewGroup {
   ...
   public static class LayoutParams extends ViewGroup.MarginLayoutParams {  
   ...
   }
}
Run Code Online (Sandbox Code Playgroud)

但是LinearLayout.LayoutParams,RelativeLayout.LayoutParams完全不同的独立课程.它们存储有关子视图的不同附加信息.

例如,LinearLayout.LayoutParams可以将weight值与每个视图关联,而RelativeLayout.LayoutParams不能.用同样的事情RelativeLayout.LayoutParams也可以像联想值:above,below,alightWithParent每个视图.而LinearLayout.LayoutParams根本就没有这些能力.


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


San*_*ton 10

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

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

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

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