В чем разница между андроидом: высота и андроид: layout_height?

<TextView android:layout_width="match_parent" android:layout_height="48dp" android:paddingTop="48dp" android:text="Test" /> 

Я ожидал бы, что TextView будет иметь измеренную высоту 96dp, независимо от того, сколько пространства (по высоте) «Тест» занял (ожидал бы, что он отключится).

Вместо этого я получаю полный «Test» + 48dp для заполнения.

Я могу поместить любое допустимое значение для layout_height и получить тот же результат.

Чтобы получить мою 96-разрядную высоту, мне нужно:

 <TextView android:layout_width="match_parent" android:layout_height="<any valid value>" android:height="48dp" android:paddingTop="48dp" android:text="Test" /> 

Где снова, я могу поместить layout_height как любое допустимое значение (но оно должно быть там как обязательный атрибут).

Я никогда не использовал атрибут height в XML, но я не мог найти разницу в документах, особенно, как каждый из них вычисляется, когда элемент, на котором он работает, также имеет значения, установленные для заполнения и / или поля.

Есть ли доступные ресурсы, которые обсуждают это, или кто-нибудь может объяснить это здесь?

  • андроид: layout_height
  • андроид: высота
  • LayoutParams

Изменить (сводка вопросов):

Возможно, это была ситуация, в которой я ее использовал, что вызывало проблему, поэтому мои примеры сверху можно игнорировать (я попытался в новом проекте и получил разные результаты из сочетаний атрибутов).

Но мои первоначальные вопросы по-прежнему применяются (некоторые совпадения):

  1. В чем разница между ними?
  2. Когда следует использовать другой?
  3. Влияет ли использование одного на использование другого?
  4. Использует ли один из них последствия для других атрибутов, которые могут контролировать измеренные размеры представления, например, заполнение или маржа?

Изменить 2 (в сторону):

Если это поможет понять мою первоначальную ситуацию по сравнению со свежим проектом:

У меня есть действие, которое устанавливает windowActionBarOverlay как true, поэтому я получаю свой контент, текущий под (полупрозрачным) ActionBar.

Я также использую Croutons, которые теперь появляются под ActionBar. Бен Вейс предположил, что я присоединяю Crouton к другой группе ViewGroup, но я не был уверен, к какой ViewGroup ее присоединить.

Вместо этого я предоставил пользовательский вид (который был завышен, когда это требуется) как Crouton (TextView из первой части вопроса) с верхним дополнением, равным верхнему дополнению ActionBar, поэтому теперь он отображается вертикально под ActionBar как Нормальный (с другими проблемами на другой день).

Solutions Collecting From Web of "В чем разница между андроидом: высота и андроид: layout_height?"

Вопрос 1:

Все атрибуты, начинающиеся с «layout_», являются подсказками для ViewGroup , частью которого является представление. Для этого каждый файл android.view.ViewGroup имеет набор LayoutParams . Сам виджет не использует их.

Параметр android:height – это начальный размер android.view.View . Но если View является частью ViewGroup тогда ViewGroup изменит размер ViewGroup в соответствии с его правилами компоновки.

BTW: новые API имеют новый android:minHeight и android:maxHeight чтобы уточнить намерения программистов.

Обратите внимание: если вы не установите android:height то высвечивается сам размер. Что правильно делать большую часть времени.

Вопрос 2:

ViewGroup является абстрактным – ответ на этот вопрос зависит от того, какой фактический класс ребенка вы используете.

Обратите внимание, что WRAP_CONTENT сообщает, чтобы использовать ViewGroup для использования android:height . Это означает, что это правильный параметр, который будет использоваться в вашем примере.

Вопрос 3:

Да – и рекурсивно. TableLayout будет читать и писать атрибут android:width чтобы узнать самый широкий объект и изменить его на все остальные объекты.

Вопрос 4:

Нет для android:padding но да для android:layout_margin . Обратите внимание, что поля являются параметром макета, и не каждый менеджер макетов поддерживает поля.

Подробнее см. В поле margin vs padding .

Заключительные слова:

Легче рассматривать только атрибуты ширины и высоты. В последнем ViewGroup о размере объекта есть менеджер компоновки используемой ViewGroup .

Немного layout_height об этом, я думаю, что layout_height является гибким – предпочтительная высота, но все равно будет расширяться / сокращаться с содержимым, а height – определенное значение.

Что происходит в вашем случае, так это то, что TextView обтекает текст Test но все еще использует атрибут paddingTop .

Ну, android_layout: height определяет базовую высоту VIEW, тогда как android: height задает высоту объекта (например, кнопку в xml).

Удачи! 🙂

Android: height делает представление таким же высоким, как и многие пиксели, в то время как android: layout_height указывает основную высоту представления.