Android расположение XML 'включают' тег, действительно работают?

Я не могу переопределить атрибуты, когда использование <включает> в мои файлы расположения Android. Когда я искал ошибки, я нашел Уменьшенный Выпуск 2863:

"включайте тег, повреждается (переопределяющие параметрические усилители расположения никогда не работает)"

Так как Romain указывает, что это работает в наборах тестов и его примерах, я должен делать что-то не так.

Мой проект организован как это:

res/layout
  buttons.xml

res/layout-land
  receipt.xml

res/layout-port
  receipt.xml

buttons.xml содержит что-то вроде этого:



  

И портрет и альбомные файлы receipt.xml смотрят что-то как:



  ...

  
  


Что я пропускаю?

84
задан Eric Burke 13 April 2010 в 17:10
поделиться

1 ответ

Я только что нашел проблему. Во-первых, вы можете переопределять только атрибуты 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, возникает RuntimeException и обрабатывается молча, без какого-либо отчета в журнале.

Решение заключается в том, чтобы всегда включать и layout_width и layout_height при использовании тега , если вы хотите переопределить любой из атрибутов layout_*.

Мой пример должен измениться на:

<include
      android:id="@+id/buttons_override"
      android:layout_width="fill_parent"
      android:layout_height="wrap_content"
      layout="@layout/buttons"/>
132
ответ дан 24 November 2019 в 08:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: