Шаблоны для Android - PullRequest
       5

Шаблоны для Android

1 голос
/ 08 декабря 2011

Я ищу простой способ сделать верстку в Android. Я уже проверяю методы включения и слияния без успеха. (Я думаю, что возможно создание пользовательских макетов и определение этого поведения с помощью кода, но мне было интересно, можно ли это сделать с помощью xml)

Я хочу определить что-то вроде этого:

 [globalLayout]
 <linearLayout params=xxx>
    <linearLayout params=yyy>
        <?yied ?>
    </linearLayout>
 </linearLayout>


 [customView1]
 <Linearlayout>
   <ImageView />
   <Button/>
 </LinearLayout>


 [customView2]
 <Linearlayout>
   <Button/>
   <Button/>
   <Button/>
 </LinearLayout>

(эти 3 xml должны быть многоразовыми)

 [HomeLayout]
 <?include globalLayout >
    <?include customView1 />
 </include>


 [ParamsLayout]
 <?include globalLayout >
    <?include customView2 />
 </include>

Дело в том, что я хочу использовать макет многократного использования, если выполнить небольшое изменение, это повлияет на все зависимые представления. что-то связанное с «частичными представлениями или шаблонами» на других языках.

Может ли кто-нибудь мне помочь?

Ответы [ 4 ]

2 голосов
/ 09 декабря 2011

Я думаю, что это пока невозможно с определениями XML, поскольку система не может определить, куда добавить ваши представления в сложной схеме схемы.

В любом случае, если вы определите свой собственный макет, вы можете легко это сделать. проверьте этот пост для более подробной информации Пользовательский макет в Android

0 голосов
/ 22 марта 2018

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.

0 голосов
/ 20 января 2012

Используйте LayoutInflater, чтобы сделать что-то вроде этого:

В onCreate деятельности:

    super.onCreate(savedInstanceState);
    setContentView(new TemplateInflater(this).apply(R.layout.products)
              .onViewGroup(R.id.replace_here).ofTemplate(R.layout.template));

Фрагмент реализации:

public View ofTemplate(int templateId) {
    LayoutInflater inflater = LayoutInflater.from(context);
    View root = inflater.inflate(templateId, null);

    View content = inflater.inflate(contentId, null);
    ((ViewGroup)root.findViewById(viewGroupId)).addView(content);

    return root;
}

Пример рабочего кода в моем git: https://github.com/erichegt/AndroidTemplating

Я думаю, что этот код решит вашу проблему, но вы должны вместо этого использовать Фрагменты. У вас может быть одно действие, связанное с шаблоном, и фрагмент для его раздувания.

0 голосов
/ 08 декабря 2011

Я делал что-то подобное раньше, используя заглушку вида. Вы можете раздуть любой вид, который вам нравится, внутри этого вида.

<GlobalLayout>
 <ViewStub>
<GlobalLayout>
...