1

我正在扩展一个 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 被拉伸以填充剩余空间。我已经尝试过让重力=正确,但没有奏效。

我有一个类似的代码路径,在其中我膨胀了一个已经在 XML 中设置了正确重力并且正在工作的视图。所以我一定在某个地方遗漏了一些东西。

4

1 回答 1

2

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

一个技巧是包装mContentView在一个垂直方向LinearLayout,给该包装器的布局权重为 1(这样它会填充剩余的空间),然后包装器将尊重RIGHT重力。

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

于 2012-08-08T16:00:04.777 回答