我正在扩展一个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正在被拉伸以填补剩余的空间。我已经尝试过让自己的引力变得正确而且无效。
我有一个类似的代码路径,我在其中为已经具有正确的重力设置的视图充气并且正在运行。所以我必须在某处遗漏某些东西。
答案 0 :(得分:2)
如果您的父LinearLayout
具有水平方向(您没有指定,但我猜),那么它将忽略所有水平布局重力位。同样,如果它有垂直方向,那么它将忽略CENTER_VERTICAL
设置。
一个技巧是将mContentView
包装在垂直方向的LinearLayout
中,给该包装器布局权重为1(因此它填充剩余空间)然后包装器将遵循{{1}引力。
更好的选择可能是扩展RIGHT
而不是RelativeLayout
。这使您可以对重力进行二维控制(与LinearLayout
不同)。