Android重力问题

时间:2011-03-15 05:30:52

标签: java android gravity

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

我尝试了设定引力的标准方法:

this.setGravity(Gravity.CENTER);

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

我也尝试过LayoutParams方法:

    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    params.gravity = Gravity.CENTER;
    block.setLayoutParams(params);
    this.addView(block);

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

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

2 个答案:

答案 0 :(得分: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);

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

我认为没有办法让视图子项小于包含它的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>

未标记的布局属性为“fill_parent”。

答案 1 :(得分:1)

看看这个:http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

基本上,android:gravity会影响View中的位置,而android:layout_gravity会相对于其父级定位View。因此,您需要use layout gravity来移动整个视图。