LayoutParams Gravity Right不强制执行

时间:2012-08-08 15:56:03

标签: android android-layout android-linearlayout android-view

我正在扩展一个LinearLayout来制作一个复合小部件。小部件设置为layout_width =“MATCH_PARENT”。

mLabelTextView = new TextView(context);
mLabelTextView.setText("Testing");
LayoutParams labelParams = new
LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
        LayoutParams.WRAP_CONTENT, 0.0f);
labelParams.gravity = Gravity.CENTER_VERTICAL;
addView(mLabelTextView, labelParams);

mContentView = new Checkbox(content);
contentParams = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f);
contentParams.gravity = Gravity.CENTER_VERTICAL | Gravity.Right;

addView(mContentView, contentParams);

我的问题是Gravity.Right属性对mContentView生效,但Gravity.CENTER_VERTICAL是。我知道mContentView正在被拉伸以填补剩余的空间。我已经尝试过让自己的引力变得正确而且无效。

我有一个类似的代码路径,我在其中为已经具有正确的重力设置的视图充气并且正在运行。所以我必须在某处遗漏某些东西。

1 个答案:

答案 0 :(得分:2)

如果您的父LinearLayout具有水平方向(您没有指定,但我猜),那么它将忽略所有水平布局重力位。同样,如果它有垂直方向,那么它将忽略CENTER_VERTICAL设置。

一个技巧是将mContentView包装在垂直方向的LinearLayout中,给该包装器布局权重为1(因此它填充剩余空间)然后包装器将遵循{{1}引力。

更好的选择可能是扩展RIGHT而不是RelativeLayout。这使您可以对重力进行二维控制(与LinearLayout不同)。