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


68

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

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

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

任何想法如何做到这一点?


据我从您的问题中了解到,您正在寻找一种以编程方式更改布局参数的方法,因此,这里是链接:这里这里
denizt

你真的不能那样做。您可以做的是在代码中对布局进行膨胀,然后将膨胀后的视图添加到父布局中。或者,您可以使用片段。
Lukas Knuth

好。因此,如果要更改“布局”参数,kcoppock的答案是合适的。
denizt

Answers:


157

使用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" />

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

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); 我有错误
slama007

@kcoppock以及单击按钮后如何更改视图(我有4个视图)
slama007

1
无需将膨胀视图保留在单独的变量中,将布局添加到原始布局中,以便可以照常使用findViewById检索组件,因此只需调用stub.inflate();即可。
Alejandro Casanova 2014年

除非您立即想对膨胀结果做些事情。
凯文·科波克

1
还有其他想法可以使ViewStub以编程方式不可见/可见。
Umang Kothari 2014年

5
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();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.