Как я могу программно включить макет в Android?


Я ищу способ включить макет программно вместо использования XML-тега include как в моем примере:

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

нужно изменить этот параметр "layout= " @layout / message" программно, пожалуйста.

есть идеи, как это сделать?

3 56

3 ответа:

использовать 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();
ViewStub stub = (ViewStub) findViewById(R.id.text_post);
        stub.setLayoutResource(R.layout.profile_header);
        View inflated = stub.inflate();

В Моно.Droid / Xamarin это сработало для меня:

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