Подтвердить что ты не робот

Какая разница между android: height и android: layout_height?

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

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

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

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

Чтобы получить высоту 96dp, мне нужно:

<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, но я не мог найти разницу в документах, особенно, как каждый из них вычисляется, когда элемент, в котором он работает, также имеет значения, установленные для заполнения и/или поля.

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


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

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

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

  • какая разница между ними?
  • когда нужно использовать другой?
  • Использование одного влияет на использование другого?
  • Может ли использование одного из них повлиять на другие атрибуты, которые могут контролировать измеренные размеры представления, такие как заполнение или маржа?

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

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

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

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

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

4b9b3361

Ответ 1

Вопрос 1:

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

Параметр android:height - это начальный размер android.view.View. Но если View является частью 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.

Ответ 2

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

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

Ответ 3

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

Удачи!:)

Ответ 4

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