以编程方式更改相对布局

6

我有一个相对布局,即 main.xml,我将其设置如下。但现在我必须将 view1 放置在 view2 上,并且设置宽度为 200dp 和高度为 100dp,这样 view2 就会变大,而 view1 就会变小放置在上面。

public void onCreate(Bundle savedInstanceState) 
         {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
         }

main.xml

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <RelativeLayout
    android:id="@+id/MainPanel"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/panel_bottom"
    android:layout_gravity="center_horizontal" >

    <com.proj.demo.view1
        android:id="@+id/sheet"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_centerInParent="true"
        android:layout_toLeftOf="@+id/panel_quick_buttons"
        />

    <com.proj.demo.view2
        android:id="@+id/sheet2"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_alignWithParentIfMissing="true"
        android:layout_centerInParent="true"
        android:layout_toLeftOf="@+id/panel_quick_buttons"
      />

</RelativeLayout>
</RelativeLayout>
2个回答

29

您想要实现什么目标?如果您只是想更改宽度和高度,则:

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

然后在 rl 之后调用 invalidate()。 - Gökhan Barış Aker
当我调用rl.invalidate()时,什么也没有发生。但是在滚动屏幕后会改变。有没有办法刷新整个屏幕? - Bagusflyer
3
你可以使用 rl.requestLayout()。 - Saurabh Android

0

我发现当尝试多次改变大小时,有一些空的变化:

relativeLayout.layoutParams.width = size
relativeLayout.layoutParams.height = size

所以,你可以使用这个 Kotlin 函数

使用 View 的 layoutParams 执行块并重新分配更新版本的 layoutParams。

relativeLayout.updateLayoutParams {
    width = size
    height = size
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接