在固定宽度 LinearLayout 中对齐 child

Aligning child in fixed width LinearLayout

我无法在使用固定宽度的 LinearLayout 中 center-align child。据我所知,这应该可以通过在 LinearLayout 上设置 gravity 标志来实现,但它似乎不起作用。

代码如下:

LinearLayout hbox = new LinearLayout(getContext());                                     
hbox.setOrientation(LinearLayout.HORIZONTAL);

TypedValue typedValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.listChoiceIndicatorMultiple, typedValue, true);         

CheckedTextView ctv = new CheckedTextView(getContext());            
ctv.setCheckMarkDrawable(typedValue.resourceId);

params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
ctv.setLayoutParams(params);

hbox.addView(ctv);

params = new LinearLayout.LayoutParams(200, LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER;
hbox.setLayoutParams(params);   

如您所见,CheckedTextView 使用 WRAP_CONTENT 所以应该可以对齐它。它的 parent LinearLayout 使用 200 像素的固定宽度和 gravity 设置为 Gravity.CENTER。不过,它没有 center-aligned,但复选框总是出现在 LinearLayout 的左侧,而不是中间。

有人知道那里出了什么问题吗?

为了回答我自己的问题,设置 params.gravity 是错误的,因为这对应于 hbox 在其父项中的对齐方式。不过,我想要的是设置 hbox 的子项的对齐方式,所以它必须是这样的:

params = new LinearLayout.LayoutParams(200, LayoutParams.WRAP_CONTENT);
hbox.setLayoutParams(params);
hbox.setGravity(Gravity.CENTER);

然后就可以了。