Android重力问题

Kyl*_*hes 2 java android gravity

我一直试图将这个自定义视图集中在我扩展LinearLayout的其他自定义视图中.这一切都需要通过代码来完成,因为它们都是在运行时完成的.

我已经尝试了设置引力的标准方法:

this.setGravity(Gravity.CENTER);
Run Code Online (Sandbox Code Playgroud)

这是在我的类中完成的,它扩展了LinearLayout.

我也尝试过LayoutParams方法:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER;
    block.setLayoutParams(params);
    this.addView(block);
Run Code Online (Sandbox Code Playgroud)

这是在我将块添加到视图的地方完成的(如您所见).

两种方法都导致块仍然在我视图的左上角对齐.我有什么其他选择,或者更重要的是,我做错了什么?

Mat*_*lis 5

尝试设置布局权重:

LinearLayout.LayoutParams params =
    new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT,
        LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.CENTER_HORIZONTAL;
params.weight = 1;
this.addView(block, params);
Run Code Online (Sandbox Code Playgroud)

这(假设您的方向是垂直的)将允许您的视图填充线性布局中的剩余空间并且应该水平居中.

我认为有一种方法可以让视图子项小于包含它的LinearLayout单元格.如果视图小于其"单元格",则LinearLayout将缩小以适应它.如果布局权重导致"单元格"增长,则包含的视图也将增长.

如果您确实希望视图小于其"单元格"并居中,请将其包装在FrameLayout中.然后,您将能够使用中心重力来满足您的内心需求.layout_width ="fill_parent"在xml中(我知道你不能直接使用它,但更容易用这种方式解释):

<LinearLayout orientation="vertical">
    <FrameLayout layout_weight="1" layout_height="wrap_content">
        <View layout_gravity="center" layout_{width,height}="wrap_content"/>
    </FrameLayout>
        ... other views ...
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

未标记的布局属性是"fill_parent".