Я не могу получить мои элементы, например ListView, чтобы правильно изменить размер.
У меня есть ListActivity для поиска, с панели мониторинга, редактирования и списка. Идея состоит в том, чтобы скрыть панель действий, пока отображается клавиатура.
Я расширил LinearLayout, чтобы прослушать изменения размера вида (как рекомендовано здесь):
public class SizeChangingLinearLayout extends LinearLayout {
//...
@Override
protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld)
{
View actionbar = mainView.findViewById(R.id.actionbar);
if (yNew > yOld)
actionbar.setVisibility(View.VISIBLE);
else if (yNew < yOld)
actionbar.setVisibility(View.GONE);
super.onSizeChanged(xNew, yNew, xOld, yOld);
}
}
Скрытие/показ панели действий работает как ожидалось, но есть пробел ниже ListView той же высоты, что и скрытая панель действий. Как только любое изменение графики (например, запись в поле редактирования), ListView заполняет пробел. Аналогичное поведение появляется в обратном порядке, скрывая клавиатуру.

[изменить]
Аналогичная проблема возникает и при изменении другого макета. Изменение Visibility объектов в onSizeChanged отображается напрямую, но изменение размеров и полей не показывается, пока какое-либо другое действие пользователя не перерисовывает эти представления. Недействительность не работает из onSizeChanged.
[/Edit]
Я попытался обновить графику:
-
invalidate- как пользовательский LinearLayout иListView(as рекомендуется здесь) -
notifyDataSetChangedв списке адаптер -
forceLayout
... и многое другое, без успеха. Почему ListView не изменяет размер вначале? Должен ли я переопределить onLayout в моем расширенном LinearLayout? Что я пропустил?