安卓重力问题

问题描述:

我一直试图将这个自定义视图居中放在这个扩展了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); 

这是在我的模块添加到视图(因为你可以看到)的地方进行。

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

尝试还设置布局重量:

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”。

+0

尝试你的第一个代码示例产生了我仍然遇到的相同结果。感觉好像我应用到自定义LinearLayout和自定义视图的所有这些属性都被忽略了。 – 2011-03-17 04:03:27

在此请看:http://thinkandroid.wordpress.com/2010/01/14/how-to-position-views-properly-in-layouts/

基本上,安卓重力影响视图中的位置的事情,而安卓layout_gravity查看相对于其父母立场。所以你需要use layout gravity来移动整个视图。