У меня есть три вида в моей деятельности в линейной вертикальной компоновке. Верхний и нижний вид имеют фиксированные высоты, а средний вид принимает любую высоту. Это, как я установить размеры для просмотров:Как заставить перерисовать виды в Activity.onConfigurationChanged
void resize(int clientHeight)
{
int heightMiddle = clientHeight - heightTop - heightBottom;
topView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, heightTop));
middleView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, heightMiddle));
bottomView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT));
}
Для того, чтобы получить clientHeight, я отменяю функцию onMeasure() и вызвать изменение размеров() внутри моей функции переопределены onMeasure(). Это хорошо работает в onCreate(). Однако, когда меняется ориентация телефона, он не работает. Я заметил, что после onCreate() функция onMeasure() вызывается дважды. После onConfigurationChanged() onMeasure() вызывается только один раз, и мой код изменения размера не имеет шансов вступить в силу. Мой Клюге решение установить таймер для вызова изменения размера() 20мс позже:
timer.schedule(new TimerTask()
{
@Override
public void run()
{
activity.runOnUiThread(new UiTask());
}
}, 20);
где UiTask будет просто вызвать изменение размера(). Это работает для меня, но я чувствую, что должно быть лучшее решение. Может кто-то пролить свет на это?
Идеальное решение. Спасибо! –