2

我在这个布局上有问题:(

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/cuerpo"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    android:orientation="vertical" >
...

在java代码中

LinearLayout cuerpo = (LinearLayout) findViewById(R.id.cuerpo);

if(align){
   cuerpo.setGravity(Gravity.CENTER_VERTICAL);
}else{
   cuerpo.setGravity(Gravity.NO_GRAVITY);
}

我需要 layout_gravity 没有重力。

4

2 回答 2

8

您正在谈论的布局重力LayoutParamsLinearLayout对象的范围内。因此,从逻辑上讲,要做到这一点,您必须遵循以下步骤:

  1. 获取LayoutParams您的LinearLayout.

  2. 如果你知道LayoutParams应该是什么,你可以施放它们(注意,这是基于你的选择,所以你必须确保它是正确的!)。

  3. gravity根据需要设置LayoutParams

所以在代码中这将是:

ViewGroup.LayoutParams layoutParams = cuerpo.getLayoutParams(); // Step 1.
LinearLayout.LayoutParams castLayoutParams = (LinearLayout.LayoutParams) layoutParams; // Step 2.
castLayoutParams.gravity = Gravity.CENTER_VERTICAL; // Step 3.

或者作为一个简单的一个班轮,将所有步骤合二为一:

((LinearLayout.LayoutParams) cuerpo.getLayoutParams()).gravity = Gravity.CENTER_VERTICAL;

请注意:

我无法确切地看到您要做什么,但它似乎不正确。的类型LayoutParams不是 的类型View,而是LayoutView要居住的类型。

就像在@gincsait 的参考中一样,如果我在 aButton中有 a LinearLayout,那么 theLayoutParamsButton将是 type LinearLayout.LayoutParams。对于the不能这么说。)LayoutParamsLinearLayout

于 2013-02-06T02:50:04.253 回答
-2

根据如何以编程方式设置 layout_gravity?你应该写:

LinearLayout cuerpo = (LinearLayout) findViewById(R.id.cuerpo);    
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
            LayoutParams.WRAP_CONTENT, LayoutParams.FILL_PARENT);

if (align) {
    params.gravity= Gravity.CENTER_VERTICAL;
} else {
    params.gravity= Gravity.NO_GRAVITY;
}
cuerpo.setLayoutParams(params);
于 2013-02-06T02:47:48.310 回答