【问题标题】:Setting Layout parameters in android在android中设置布局参数
【发布时间】:2011-09-21 04:26:21
【问题描述】:

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

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

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

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

我看到我可以选择将其指定为相对布局、框架布局等。 到目前为止,我正在为所有视图(例如图像、文本和网格视图)使用线性布局。视图参数是否应该根据父元素的布局来定义?或者即使视图是框架布局的子级,也可以将其指定为线性布局?抱歉,我没发现区别。

【问题讨论】:

  • 据我所知你也可以对 relativelayout 做同样的事情
  • 两者有区别吗?

标签: android android-layout layoutparams


【解决方案1】:

所有布局类(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 根本没有这些能力。


因此,一般来说,您必须使用封闭布局中的LayoutParams 来正确定位和呈现您的视图。但请注意,所有LayoutParams 都有相同的父类ViewGroup.LayoutParams。如果您只使用在该类中定义的功能(例如在您的情况下 WRAP_CONTENTFILL_PARENT),您可以获得工作代码,即使错误的 LayoutParams 类用于指定布局参数。

【讨论】:

    【解决方案2】:

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

    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 类型变量应该是视图返回的类型...检查视图返回的类型并在导入语句中导入该类型。

    【讨论】:

      猜你喜欢
      • 2012-02-23
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多