Включает ли View.getHeight/getWidth заполнение?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Включает ли View.getHeight/getWidth заполнение?

Сообщение Anonymous »

У меня сложилось впечатление, что значение, возвращаемое View.getWidth(), включает в себя заполнение. Я не думаю, что у меня галлюцинации: обычная строка кода, которую пишут разработчики Android, — это что-то вроде myView.run { width - (paddingLeft + paddingRight) , цель которого — получить ширину представления без отступов (так сказать, «базовую ширину»).
Это то, что я лично делал на своих предыдущих работах, и это также подтверждается многочисленными другими примерами в Интернете (ссылка: Поиск кода SourceGraph).
Однако, попытавшись использовать этот шаблон сегодня, я был шокирован, увидев, что возвращаемое значение View.getWidth() не включает в себя заполнение. Чтобы проиллюстрировать это, я провел следующий эксперимент:

Код: Выделить всё

myList.forEach { s ->
val squareItemView = SquareItemView(this)
// irrelevant boilerplate omitted
innerContents.addView(squareItemView)
innerContents.post {
val baseWidth = innerContents.run { width - (paddingLeft + paddingRight) }
Log.i(
"TAG",
"innerContents.measuredWidth=${innerContents.measuredWidth}, " +
"innerContents.width=${innerContents.width}, " +
"baseWidth=${baseWidth}, " +
"innerContents.paddingLeft=${innerContents.paddingLeft}"
)
Log.i("TAG", "will add 10px px on either side")
innerContents.apply { setPadding(paddingLeft + 10, paddingTop, paddingRight + 10, paddingBottom) }
}
}
Вот вывод журнала:

Код: Выделить всё

23:42:49.923  I  innerContents.measuredWidth=693, innerContents.width=693, baseWidth=693, innerContents.paddingLeft=0
23:42:49.923  I  will add 10px px on either side
23:42:49.924  I  innerContents.measuredWidth=693, innerContents.width=693, baseWidth=673, innerContents.paddingLeft=10
23:42:49.924  I  will add 10px px on either side
23:42:49.924  I  innerContents.measuredWidth=693, innerContents.width=693, baseWidth=653, innerContents.paddingLeft=20
23:42:49.924  I  will add 10px px on either side
Обратите внимание, что каждый раз, когда мы добавляем по 10 пикселей заполнения слева и справа:
  • простые числа getMeasuredWidth и getWidth идентичны и остаются постоянными.
  • вычисление «базовой ширины» уменьшается на величину заполнения.
Этот результат противоречит тому, что мы ожидаем увидеть. Как я уже сказал, я не помню, чтобы такое было несколько месяцев (недель?) назад, но, видимо, это так. Изменил ли Google это поведение на уровне библиотеки или даже на уровне ОС? Что происходит? :(

Подробнее здесь: https://stackoverflow.com/questions/798 ... de-padding
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»