Я не могу получить мои элементы, например 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? Что я пропустил?