【问题标题】:How to set android:layout_weight and android:layout_width in code?如何在代码中设置 android:layout_weight 和 android:layout_width?
【发布时间】:2017-11-09 12:36:50
【问题描述】:

谁能告诉我如何在代码中为动态创建的视图设置 android:layout_weight 和 android:layout_width XML 属性?

参考:XML Table layout? Two EQUAL-width rows filled with equally width buttons?

【问题讨论】:

    标签: android android-layout


    【解决方案1】:

    使用ViewGroup.LayoutParams

    LayoutParams lp = new LayoutParams(LayoutParams.FILL_PARENT, 
                                       LayoutParams.WRAP_CONTENT);
    myview.setLayoutParams(lp);
    

    您还可以在构造函数中指定固定像素大小,而不是常量。但由于设备种类繁多,固定像素在 android 上并不是一个好主意。

    您可以根据dp 大小计算像素,这没关系:

    float pixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 
                                             10, getResources.getDisplayMetrics());
    

    (此处:将 10dp 转换为像素值)

    【讨论】:

    • 好吧,我正在尝试制作两个大小相同的按钮。在 XML 中,你可以这样做:,但我不知道如何在 Java 中做到这一点。
    • 我提供了一个类似的答案here。这是两个RelativeLayouts,但它与两个Buttons 的工作方式相同。
    • 是的,做到了!不知道您可以像这样将 LayoutParams 添加到 .addView() 。谢谢!
    • 值得注意的是LinearLayout 必须使用LinearLayout.LayoutParams 而不是通用的ViewGroup.LayoutParams(编译但在运行时失败)。这可能适用于其他布局,也可能不适用,但我对此摸不着头脑
    【解决方案2】:

    试试

    setLayoutParams(new LayoutParams(width, height))
    

    构造函数的文档说:

    ViewGroup.LayoutParams(int width, int height)
    

    创建一组具有指定宽度和高度的新布局参数。

    【讨论】:

      【解决方案3】:

      如下设置动态创建视图的布局参数

      LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(
                                  LinearLayout.LayoutParams.MATCH_PARENT,
                                  LinearLayout.LayoutParams.WRAP_CONTENT,
                                  2f
                          );
      myView.setLayoutParams(param) 
      

      这里最后一个参数“2f”指定视图的布局权重。我们也可以在这里使用小数点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-23
        相关资源
        最近更新 更多