-
Notifications
You must be signed in to change notification settings - Fork 22
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
base: master
Are you sure you want to change the base?
Conversation
…ation and check some case for it
for (int i = 0; i < getChildCount(); ++i) { | ||
View child = getChildAt(i); | ||
|
||
if (child == null) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А в какой ситуации такое может быть?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я думаю, например, можно добавить программно вьюшку к лейауту зануленую, или удалить неправильно.
Читал исходники Linear'а, там есть подобная проверка - решил, что она не лишена смысла
There was a problem hiding this comment.
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 для каких-то выравниваний, то есть не подходит для нашего случая.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
там под личиной метода getVirtualChildAt скрывается getChildAt(index)
по-этому я решил, что будет лучше перестраховаться и оставить данную проверку
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да, то есть использует реализацию по умолчанию, но вообще метод существует для TableRow, который видимо и может вернуть null.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
осознал)
надо было внимательнее читать документацию)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fix
По поводу марджинов у потомков. Для этого вьюха должна поддерживать MarginLayoutParams и соответственно учитывать их при измерении и расположении. |
if (child == null) { | ||
continue; | ||
} | ||
if (child.getVisibility() == GONE) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
неплохо бы проверять скрыта ли вьюха и в onLayout
There was a problem hiding this comment.
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
Запрошенное в задании поведение аналогично 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 у детей (интересно, как это происходит?)