Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Владимир Каткалов @katkalov #25

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

katkalof
Copy link

@katkalof katkalof commented Jul 27, 2016

Запрошенное в задании поведение аналогично LinearLayout с layout_heigh=match_parent, искомый элемент match_parent в CustomLayout аналогичен элементу данного LL weight=n(у всех одно, если хотим несколько) и layout_width=0dp.

Рассмотрено большое количество различных случаев размещения CustomLayout и его сравнение с LL, в частности:
возможность расположения нескольких элементов c width match_parent, расстояние делится поровну
отсутствие элементов с match_parent
расположения CustomLayout в ScrollView и HorizontalScrollView
установка margin и padding CustomLayout
различная высота вложенных View
и что-нибудь еще

Точно отсутствует:
margin у детей (интересно, как это происходит?)

device-2016-07-27-072138
device-2016-07-27-072211
device-2016-07-27-072220
device-2016-07-27-072230
device-2016-07-27-072240

for (int i = 0; i < getChildCount(); ++i) {
View child = getChildAt(i);

if (child == null) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А в какой ситуации такое может быть?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я думаю, например, можно добавить программно вьюшку к лейауту зануленую, или удалить неправильно.
Читал исходники Linear'а, там есть подобная проверка - решил, что она не лишена смысла

Copy link
Collaborator

@bracadabra bracadabra Aug 9, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Если добавлять зануленную вьюху, то есть обычный null, то вылетет IllegaдArgumentException. Я посмотрел мельком LinealLayout, там вызвается getVirtualChildAt, судя по комменту, он используется в TableRow для каких-то выравниваний, то есть не подходит для нашего случая.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

там под личиной метода getVirtualChildAt скрывается getChildAt(index)
по-этому я решил, что будет лучше перестраховаться и оставить данную проверку

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

да, то есть использует реализацию по умолчанию, но вообще метод существует для TableRow, который видимо и может вернуть null.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

осознал)
надо было внимательнее читать документацию)

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fix

@bracadabra
Copy link
Collaborator

По поводу марджинов у потомков. Для этого вьюха должна поддерживать MarginLayoutParams и соответственно учитывать их при измерении и расположении.

if (child == null) {
continue;
}
if (child.getVisibility() == GONE) {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

неплохо бы проверять скрыта ли вьюха и в onLayout

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fix

…e to confirm

why - it was wrong using measureChild to element which width = match_parent
how - using measure for match_parent width children and consider layout padding in onMeasure
…e to confirm

why - it was wrong using measureChild to element which width = match_parent
how - using measure for match_parent width children and consider layout padding in onMeasure
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants