【问题标题】:Aligning child in fixed width LinearLayout在固定宽度 LinearLayout 中对齐子项
【发布时间】:2018-05-12 11:02:24
【问题描述】:

我无法在使用固定宽度的LinearLayout 中将子元素居中对齐。据我所知,这应该可以通过在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,因此应该可以对齐它。它的父 LinearLayout 使用 200 像素的固定宽度,gravity 设置为 Gravity.CENTER。不过,它不是居中对齐的,但复选框始终出现在 LinearLayout 的左侧,而不是居中。

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

【问题讨论】:

    标签: android android-layout android-linearlayout


    【解决方案1】:

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

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

    然后就可以了。

    【讨论】:

      猜你喜欢
      • 2020-11-23
      • 1970-01-01
      • 2016-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-20
      • 2017-05-26
      • 1970-01-01
      相关资源
      最近更新 更多