如何在Android中以编程方式包含布局?

79

我希望能以编程方式包含布局,而不是像我的示例中使用XML标签 include

  <include layout="@layout/message"  
           android:layout_width="match_parent" 
           android:layout_height="match_parent" 
           android:layout_weight="0.75"/>

请问如何在程序中以编程方式更改此参数"layout="@layout/message"?

有任何想法吗?


根据我理解你的问题,你想要以编程的方式改变布局参数,所以这里有两个链接:这里这里 - denizt
你不能真的像那样做。你可以在代码中填充布局并将填充的视图添加到父布局中,或者你可以使用Fragments。 - Lukas Knuth
好的。如果你想改变“layout”参数,kcoppock的回答是合适的。 - denizt
4个回答

178

使用 ViewStub 而不是 include

<ViewStub
    android:id="@+id/layout_stub"
    android:inflatedId="@+id/message_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="0.75" />

接着,在代码中获取stub的引用,设置其布局资源并进行填充:

ViewStub stub = (ViewStub) findViewById(R.id.layout_stub);
stub.setLayoutResource(R.layout.whatever_layout_you_want);
View inflated = stub.inflate();

1
@kcoppock 谢谢,没问题。但是我该如何在我的布局中调用 TextView?因为使用这段代码 TextView close1 = (TextView) findViewById(R.id.close1); 我遇到了错误。 - slama007
@kcoppock,我如何在按钮点击后更改视图(我有4个视图)? - slama007
1
不需要将充气视图存储在单独的变量中,布局会添加到原始布局中,因此组件可以像往常一样使用findViewById检索,只需调用stub.inflate(); - Alejandro Casanova
除非您立即要对膨胀的结果进行操作。 - Kevin Coppock
1
有没有其他的想法可以通过编程使ViewStub在界面上可见或不可见? - Umang Kothari
显示剩余6条评论

6
ViewStub stub = (ViewStub) findViewById(R.id.text_post);
        stub.setLayoutResource(R.layout.profile_header);
        View inflated = stub.inflate();

1
你将如何在profile_header.xml中使用视图? - Arnold Brown

3

在Mono.Droid/Xamarin中,以下方法对我有效:

ViewStub stub = FindViewById<ViewStub>(Resource.Id.layout_stub);
stub.LayoutResource = Resource.Layout.whatever_layout_you_want;
stub.Inflate();

1

ViewStub Kotlin实现

在你的onCreate函数内:

val viewStub: ViewStub? = binding?.viewStub
viewStub?.layoutResource = R.layout.your_layout

if (viewStub?.parent != null) {
    viewStub.inflate()
}

不要忘记评论以寻求任何咨询


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