18

嗨,我在 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 在全屏上设置相对布局,但我必须在屏幕上放置另一个视图,所以有可能或者我必须以另一种方式实现它......

4

8 回答 8

26

wrap_content一旦显示,Android 不会刷新视图的布局。即使有invalidate()or requestLayout()。所以如果你添加一个子视图,或者动态地修改内容,你就完蛋了。

getLayoutParams().height = xrequestLayout() 如果您知道“x”并且只需要执行一次,则 plus是一个很好的解决方案。之后wrap_contentinLayoutParams丢失了,因为你已经覆盖了它。

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

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

享受!

于 2014-04-02T21:00:12.660 回答
18

尝试使用这个

getLayoutParams().height= x;
requestLayout(); or invalidate(); 
于 2013-03-15T05:11:25.620 回答
7

在 .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);
于 2013-03-15T05:24:53.820 回答
2

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

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

paramsTop 你的真实布局:-

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

        paramsTop = new RelativeLayout.LayoutParams(width, height);
于 2013-03-15T05:17:03.677 回答
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;
于 2013-03-15T05:18:05.637 回答
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);
于 2016-01-29T06:23:18.717 回答
1

如果您打算更改高度,那么这将是一个技巧。

RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.yourId);
relativeLayout.getLayoutParams().height = 100;
relativeLayout.getLayoutParams().width = 100;
于 2016-11-20T00:08:23.990 回答
0

LinearLayout在使用which haswrap_content和一个 child as TextViewwhich had时我遇到了同样的问题match_parent

以编程方式删除TextView,然后再次添加。

linearLayout.removeView(textView)
linearLayout.addView(textView)

我知道这听起来很愚蠢,但它确实有效。在我的情况下,调用无效无效,只有这个有效。

根据您的实现,您需要处理其父级中的视图索​​引

于 2021-09-10T10:00:28.980 回答