动态更改相对布局宽度和高度

时间:2013-03-15 05:08:24

标签: android android-layout

您好我在LinearLayout

中使用以下布局结构
<TableLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" >

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >
    </TableRow>

    <TableRow
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <TextView
            android:id="@+id/tv1"
            android:layout_height="wrap_content"
            android:gravity="left"
            android:paddingLeft="10dp"
            android:textColor="#000" />

        <TextView
            android:id="@+id/tv2"
            android:layout_height="wrap_content"
            android:layout_weight="1.0"
            android:gravity="right"
            android:paddingRight="10dp"
            android:textColor="#000" />
    </TableRow>
</TableLayout>

<ImageView
    android:id="@+id/img1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center" />

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="320px"
    android:layout_height="320px"
    android:gravity="center" >
</RelativeLayout>

并且想要从java文件动态设置相对布局宽度和高度,而不是在xml文件中将其设置为320px但不能这样做,因为我将限制仅限于纵向模式,因此方向更改不是问题。可以使用match_parent在全屏幕上设置相对布局,但我必须在屏幕上放置另一个视图,这样就可以了,或者我必须以另一种方式实现它...

7 个答案:

答案 0 :(得分:25)

Android一旦显示,就不会刷新wrap_content的视图布局。 即使使用invalidate()requestLayout()。 因此,如果你添加一个子视图,或者动态修改内容,你就搞砸了。

如果您知道“x”,那么

getLayoutParams().height = xrequestLayout()是一个很好的解决方案,如果您只需要执行此操作。 之后,wrap_content中的LayoutParams会丢失,因为您已覆盖它。

为了解决这个问题,我编写了一个静态类,它重新计算大小并强制更新wrap_content视图的布局。使用的代码和说明可在此处获取:

https://github.com/ea167/android-layout-wrap-content-updater

享受!

答案 1 :(得分:16)

尝试使用此

getLayoutParams().height= x;
requestLayout(); or invalidate(); 

答案 2 :(得分:6)

在.xml中为您的相对布局指定一个id:

android:id="@+id/relativelayout"

现在在你的java文件中写下这个:

RelativeLayout Rl = (RelativeLayout) findViewById(R.id.relativelayout);

RelativeLayout.LayoutParams layout_description = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedwidth,
                        RelativeLayout.LayoutParams.FILL_PARENT or YourUserDefinedHeight);

Rl.setLayoutParams(layout_description);

答案 3 :(得分:2)

从下面的代码中你可以得到设备的高度和宽度: -

Display display = getWindowManager().getDefaultDisplay();
    int width = (display.getWidth() );
    int height = (display.getHeight() );

paramsTop urrealative layout: -

现在你可以设置你想要的高度或宽度。

        paramsTop = new RelativeLayout.LayoutParams(width, height);

答案 4 :(得分:2)

您可以使用LayoutParams动态设置视图尺寸。 像这样:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.yourlayout_id);
// Gets the layout params that will allow you to resize the layout
LayoutParams params = layout.getLayoutParams();
params.height = 320;
params.width = 320;

答案 5 :(得分:2)

我遇到了这个问题,这是动态改变相对布局宽度和高度的最佳解决方案

RelativeLayout relMain = (RelativeLayout) convertView.findViewById(R.id.relMain);
    RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
    params.width =200;
 params.height =200;
 params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        relMain.setLayoutParams(params);

答案 6 :(得分:0)

如果你打算改变身高,那么这将成为一个伎俩。

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId);
relativeLayout.getLayoutParams().height = 100;
relativeLayout.getLayoutParams().width = 100;