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

Posted

技术标签:

【中文标题】如何以编程方式在 Android 中包含布局?【英文标题】:How can I programmatically include layout in Android? 【发布时间】:2013-09-30 17:32:53 【问题描述】:

我正在寻找一种以编程方式包含布局的方法,而不是像我的示例中那样使用 XML 标记 include

  <include layout="@layout/message"  
           android:layout_ 
           android:layout_ 
           android:layout_weight="0.75"/>

请以编程方式更改此参数“layout="@layout/message”。

知道怎么做吗?

【问题讨论】:

据我从您的问题中了解到,您正在寻找一种以编程方式更改布局参数的方法,所以这里是链接:here 和 here。 你不能那样做。您可以做的是在代码中膨胀布局并将膨胀的视图添加到您的父布局中。或者你可以使用 Fragments。 好的。因此,如果您想更改“布局”参数,kcoppock 的答案是合适的。 【参考方案1】:

使用ViewStub 代替include

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

然后在代码中,获取对存根的引用,设置其布局资源,并对其进行扩充:

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

【讨论】:

@kcoppock 谢谢,没关系,但我如何在我的布局中调用 TextView,因为使用此代码 TextView close1 = (TextView) findViewById(R.id.close1);我有错误 @kcoppock 以及如何在单击按钮后更改视图(我有 4 个视图) 无需将膨胀视图保存在单独的变量中,布局已添加到原始视图中,因此可以像往常一样使用 findViewById 检索组件,因此只需调用 stub.inflate();跨度> 除非你立即想对膨胀的结果做点什么。 还有什么想法可以通过编程方式使 ViewStub 不可见/可见..??【参考方案2】:
ViewStub stub = (ViewStub) findViewById(R.id.text_post);
        stub.setLayoutResource(R.layout.profile_header);
        View inflated = stub.inflate();

【讨论】:

你将如何使用 profile_header.xml 中的视图?【参考方案3】:

在 Mono.Droid / Xamarin 这对我有用:

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

【讨论】:

以上是关于如何以编程方式在 Android 中包含布局?的主要内容,如果未能解决你的问题,请参考以下文章

dplyr:如何以编程方式完整连接列表列表中包含的数据帧?

在片段中以编程方式在视图中包含布局

Android:无法在约束布局中以编程方式正确添加约束集

如何在横向布局中包含纵向布局?

Android:当布局已经包含按钮时,如何以编程方式覆盖整个布局?

如何仅以编程方式在android中添加动态网格布局?