Могу ли я создать повторно используемый компонент в макете Android XML? - PullRequest
1 голос
/ 02 марта 2020

Это простой вопрос эффективности кода, пока я узнаю больше о макетах. Я создаю сетку флажков, и у каждого из них по большей части одинаковые атрибуты. Каждый флажок имеет 8 атрибутов, 5 из которых одинаковы для каждого. Могу ли я создать своего рода специальный класс-флажок, который я смогу использовать повторно, что значительно упростит мой файл XML?

Бонусные баллы: можно ли создать цикл / массив в моем файле XML, чтобы мне не приходилось кодировать каждый блок отдельно? У меня есть 32 строки по 5 столбцов = 160 отдельных компонентов флажка.

app_screenshot code_screenshot

Ответы [ 4 ]

2 голосов
/ 02 марта 2020

Стиль в значениях / стилях. xml Добавить общие правила в стиле

<style name="MyCheckBoxStyle">
        <item name="android:layout_width">match_parent</item>
        <item name="android:layout_height">wrap_content</item>
        ....
</style>

Использовать так -

<CheckBox
..uncommon rules...
style="@style/MyCheckBoxStyle"/>
2 голосов
/ 02 марта 2020

Для l oop вы делаете это не на том уровне. Создайте пользовательское представление, которое расширяет любой класс Layout, наиболее удобный (линейный, фрейм, ограничение, относительный и т. Д. c). В своем конструкторе l oop создает соответствующее количество дочерних элементов и добавляет их к себе. Затем включите этот класс в ваш xml.

0 голосов
/ 02 марта 2020

1) Для этой цели вы можете использовать RecyclerView с GridLayoutManager.

2) Вы также можете динамически добавлять RadioButton s linearLayout.addView(radioButton);

Вне курса метод 1 является наиболее предпочтительным, так как он хорош с точки зрения производительности.

0 голосов
/ 02 марта 2020

Создайте изолятный xml файл для вашего просмотра, который вы хотите использовать во многих местах. После этого просто используйте <include/> там, где вы хотите использовать xml.

      <include
        android:id="@+id/toolbar"
        layout="@layout/common_tool_bar_layout" // your xml name
        app:layout_constraintEnd_toEndOf="parent"/>
...