Я не могу переопределить атрибуты, когда использование <включает> в мои файлы расположения Android. Когда я искал ошибки, я нашел Уменьшенный Выпуск 2863:
"включайте тег, повреждается (переопределяющие параметрические усилители расположения никогда не работает)"
Так как Romain указывает, что это работает в наборах тестов и его примерах, я должен делать что-то не так.
Мой проект организован как это:
res/layout
buttons.xml
res/layout-land
receipt.xml
res/layout-port
receipt.xml
buttons.xml содержит что-то вроде этого:
И портрет и альбомные файлы receipt.xml смотрят что-то как:
...
Что я пропускаю?
Я только что нашел проблему. Во-первых, вы можете переопределять только атрибуты layout_*, поэтому фон не будет работать. Это задокументированное поведение и просто недосмотр с моей стороны.
Настоящая проблема кроется в LayoutInflater.java:
// We try to load the layout params set in the <include /> tag. If
// they don't exist, we will rely on the layout params set in the
// included XML file.
// During a layoutparams generation, a runtime exception is thrown
// if either layout_width or layout_height is missing. We catch
// this exception and set localParams accordingly: true means we
// successfully loaded layout params from the <include /> tag,
// false means we need to rely on the included layout params.
ViewGroup.LayoutParams params = null;
try {
params = group.generateLayoutParams(attrs);
} catch (RuntimeException e) {
params = group.generateLayoutParams(childAttrs);
} finally {
if (params != null) {
view.setLayoutParams(params);
}
}
Если тег
Решение заключается в том, чтобы всегда включать и layout_width и layout_height при использовании тега
Мой пример должен измениться на:
<include
android:id="@+id/buttons_override"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/buttons"/>