我一直试图将这个自定义视图集中在我扩展为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);
这是在我将块添加到视图的地方完成的(如您所见)。
两种方法都导致块仍然在我视图的左上角对齐。我还有什么其他选择,或者更重要的是,我做错了什么?
答案 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来移动整个视图。