Вид с состоянием видимости GONE занимает место на экране

У меня возникла проблема, когда представления с состоянием видимости GONE (нежелательно) занимают место на экране. Эта проблема возникает всегда на устройствах уровня API <= 7, но только недавно на 8+ устройствах (после того, как я использовал AsyncTasks для заполнения некоторых полей, Я создал настраиваемое представление, расширяющее LinearLayout, которое содержит кнопку «заголовок» и (определяется пользователем; в некоторых случаях это несколько TextView, в других - TableLayouts) «содержимое». Цель этого представления - переключить представление содержимого при нажатии кнопки заголовка (я не верю, что для этого есть встроенный виджет .. Я могу ошибаться).

В 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);
        }
    }
}
7
задан Community 23 May 2017 в 12:30
поделиться