如何在代码中设置android:layout_weight和android:layout_width?

10
3个回答

19

使用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中,您可以这样做:<Button android:layout_weight="1" android:layout_width="0dip"/>,但我不知道如何在Java中实现。 - Fran Fitzpatrick
1
我在这里提供了一个类似的答案(http://stackoverflow.com/questions/7056072/android-how-to-place-two-relative-layouts-one-on-the-left-and-one-on-the-right/7056089#7056089)。这是使用两个`RelativeLayout`实现的,但是使用两个`Button`的方式相同。 - user658042
好的,搞定了!我不知道你可以像那样在.addView()中添加LayoutParams。谢谢! - Fran Fitzpatrick
值得注意的是,LinearLayout 必须使用 LinearLayout.LayoutParams 而不是通用的 ViewGroup.LayoutParams(虽然编译时可以通过,但在运行时会失败)。其他布局可能也是如此,但我曾经为此苦恼了很长时间。 - Neil C. Obremski

4

尝试

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”指定了视图的布局权重。我们也可以在这里使用小数点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接