Android LayoutParams重力权限未强制执行

Android LayoutParams重力权限未强制执行,android,android-layout,android-linearlayout,android-view,Android,Android Layout,Android Linearlayout,Android View,我正在扩展一个LinearLayout来制作一个复合小部件。小部件被设置为layout\u width=“MATCH\u PARENT” 我的问题是Gravity.Right属性对mContentView生效,但Gravity.CENTER\u是垂直的。我知道McContentView正在拉伸以填充剩余空间。我已经试过让重力自行恢复正常,但没有成功 我有一个类似的代码路径,在该路径中,我膨胀了一个视图,该视图已经在XML中设置了正确的重力,并且正在工作。所以我一定是遗漏了什么。如果您的父级Lin

我正在扩展一个LinearLayout来制作一个复合小部件。小部件被设置为layout\u width=“MATCH\u PARENT”

我的问题是Gravity.Right属性对mContentView生效,但Gravity.CENTER\u是垂直的。我知道McContentView正在拉伸以填充剩余空间。我已经试过让重力自行恢复正常,但没有成功


我有一个类似的代码路径,在该路径中,我膨胀了一个视图,该视图已经在XML中设置了正确的重力,并且正在工作。所以我一定是遗漏了什么。

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

一个技巧是以垂直方向的
LinearLayout
包装
mContentView
,给该包装一个布局权重1(这样它就填充了剩余的空间),然后包装将尊重
右侧的重力


更好的替代方法可能是扩展
RelativeLayout
,而不是
LinearLayout
。这让你可以对重力进行二维控制(与线性布局不同)。

谢谢Ted。这很有道理。我将使用RelativeLayout,因为我不想在我的树中引入另一个级别。是的,这是水平方向。
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);