ViewStub довольно прост и может охватывать основные потребности шаблонов макета.
Он служит заполнителем для некоторого другого макета, который можно указать и накачать во время выполнения, а затем:
Надутый вид добавляется в родительский элемент ViewStub с параметрами макета ViewStub.
Вот пример из одного из моих проектов.В моем шаблоне макета у меня есть:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout ... >
...
<ViewStub
android:layout_width="0dp"
android:layout_height="0dp"
android:id="@+id/button_1_stub"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/split_guideline"
app:layout_constraintLeft_toRightOf="@+id/primary_left_guideline"
app:layout_constraintRight_toLeftOf="@+id/primary_right_guideline">
</ViewStub>
....
</android.support.constraint.ConstraintLayout>
... тогда, когда я его раздуваю, я устанавливаю фактическую раскладку кнопки, которая мне нужна, и раздуваю заглушку:
View contentView = inflater.inflate(R.layout.activity_main_template, null);
ViewStub button1Stub = contentView.findViewById(R.id.button_1_stub);
button1Stub.setLayoutResource(R.layout.work_button);
button1Stub.inflate();
...который вставляет компоновку из R.layout.work_button
вместо заглушки, накладывая ограничения макета, которые я определил для R.id.button_1_stub
.