У меня возникла проблема, когда представления с состоянием видимости GONE (нежелательно) занимают место на экране.Эта проблема возникает всегда на устройствах уровня API <= 7, но только недавно на устройствах 8+ (после того, как я использовал AsyncTasks для заполнения некоторых полей, согласно <a href="/3508896/pokazyvat-indikator-vypolneniya-kogda-zagruzhaetsya-deistvie"> Отображение индикатора выполнения при загрузке действия )
Немного контекста: я создал собственное представление, расширяющее LinearLayout, которое содержит кнопку «заголовок» и (определяемый пользователем; в некоторых случаях это несколько TextViews, в других это TableLayouts) «содержимое».Целью этого представления является переключение просмотра содержимого onClick кнопки заголовка (я не верю, что для этого есть встроенный виджет .. Я могу ошибаться).
В onLayout ()Я в явном виде устанавливаю состояние видимости всех дочерних представлений, кроме заголовка, GONE при первом рисовании:
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if(initialDraw) {
setContentsVisible(false);
initialDraw = false;
}
super.onLayout(changed, l, t, r, b);
}
public void setContentsVisible(boolean visible) {
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
if(child != mTitle) {
child.setVisibility(visible ? VISIBLE : GONE);
}
}
}