#android #android-layout
#Android #android-layout
Вопрос:
Следующий вопрос некоторое время озадачивал меня, и я подумал, что, возможно, вопрос об этом не повредит. У меня есть следующее layout.xml и style.xml файлы;
res/layout/layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
style="@style/headerContainer" />
<LinearLayout
style="@style/footerContainer" />
<ScrollView
style="@style/contentContainer" />
</RelativeLayout>
res/values/style.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="container">
<item name="android:layout_width">fill_parent</item>
</style>
<style name="headerContainer" parent="container">
<item name="android:layout_height">40dp</item>
<item name="android:layout_alignParentTop">true</item>
<item name="android:background">#80FF0000</item>
<item name="android:id">@ id/header</item>
</style>
<style name="footerContainer" parent="container">
<item name="android:layout_height">50dp</item>
<item name="android:layout_alignParentBottom">true</item>
<item name="android:background">#8000FF00</item>
<item name="android:id">@ id/footer</item>
</style>
<style name="contentContainer" parent="container">
<item name="android:layout_height">60dp</item>
<item name="android:layout_below">@id/header</item>
<item name="android:layout_above">@id/footer</item>
<item name="android:background">#800000FF</item>
</style>
</resources>
Теперь вопрос в том, существует ли опасность перекрытия идентификаторов, поскольку я представляю их в style.xml ? Забавно, что этот подход работает, по крайней мере, на эмуляторе, который я использую, но созданные идентификаторы не добавляются в R
класс. И я немного смущен тем, как они определяются после того, как мой макет раздут.
Ответ №1:
Не используйте @ id/...
в стилях.
@ id/...
может использоваться только в макетах.
В противном случае вы можете получить Error executing apt: return code 139
во время сборки.При необходимости
используйте @id/...
и генерируйте идентификаторы с помощью файла справочных ресурсов: res/values/ids.xml:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="id" name="header" />
<item type="id" name="footer" />
</resources>
http://developer.android.com/guide/topics/resources/more-resources.html#Id
Ответ №2:
Это небезопасно, мой друг. Вы должны использовать разные идентификаторы для разных файлов. Здесь эмулятор не будет проблемой. Он поймет, потому что для каждого xml-файла определен уникальный код R.java файл автоматически. Таким образом, эмулятор очень легко разберется с этим. Но если вам нужно улучшить или отредактировать код для любой градации up, вы наверняка запутаетесь, какой идентификатор принадлежит макету какого xml-файла или вклинивается. Поэтому предоставьте уникальный идентификатор каждому виджету макета. Будет полезно, если вы предоставите идентификатор, включающий некоторый тег соответствующего имени файла.
Пример: если имя файла filldetails.xml затем вы можете использовать id =@ fd_name
Будет полезно знать, как работает приложение.
Ответ №3:
Я делаю это таким образом, и мне повезло:
Макет res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<include layout="@layout/action_bar"/>
</RelativeLayout>
Обычный:
res/layout/action_bar.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@ id/action_bar_container"
android:layout_width="fill_parent"
android:layout_height="@dimen/action_bar_height"
android:layout_alignParentTop="true"
android:paddingLeft="5dip"
android:paddingRight="5dip"
>
<TextView
android:id="@ id/action_bar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:textSize="20dip"
android:textStyle="bold"
/>
</RelativeLayout>
Комментарии:
1. Это один из вариантов, который я тоже рассматривал. Но в конце я, хотя, возможно, объявляю верхний / нижний колонтитулы отдельно в каждом layout.xml Они мне нужны, чтобы обеспечить некоторую гибкость, которая того стоит. Пока я могу уменьшить объем копирования / вставки кода до нескольких строк, используя стили, которые есть.