У меня есть огромный файл макета с именем visit_registration.xml. Чтобы поддерживать разные размеры экрана, я продублировал файл и создал файлы layout-sw600dp/visit_registration.xml и layout-sw720dp/visit_registration.xml.Android - Избегайте дублирования макета
Существует одна небольшая разница между раскладок:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/app_margin"
android:paddingRight="@dimen/app_margin">
<TextView
android:id="@+id/visitRegistrationTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/visit_registration" />
<!-- TONS of UI elements here! -->
</LinearLayout>
Исходный файл макета (выше) показывает TextView с идентификатором «visitRegistrationTextView».
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingLeft="@dimen/app_margin"
android:paddingRight="@dimen/app_margin">
<TextView
android:id="@+id/visitRegistrationTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:text="@string/visit_registration" />
<!-- TONS of UI elements here! -->
</LinearLayout>
В каждой копии используется другая видимость. В приведенном выше примере используется «ушел». Иногда изменения разные, но небольшие, как элемент пользовательского интерфейса, перемещаются в другое место в макете. Остальная часть кода остается прежней.
Главный вопрос о дублировании макета. Я не хочу поддерживать три разных макета из-за классических проблем с дублированием, таких как «Что произойдет, если мне нужно изменить общий элемент пользовательского интерфейса, присутствующий в трех файлах, и забудьте изменить его в одном месте?»
Возможно ли иметь единую «базовую компоновку» с общими элементами пользовательского интерфейса и включать в нее небольшие изменения макета соответственно с текущим размером экрана?
С вашим предложением, нужно ли создать файл для каждого изменения и включить его в основной макет? –
Да, это точно. Где-то вы должны определить разницу для различных конфигураций. – Stefano
Но могу ли я определить различия в одном файле? –