2015-06-09 3 views
3

Я спрячу клавиатуру. Если я сразу сделаю видимым вид, появится надпись над клавиатурой, а затем она исчезнет на месте клавиатуры.Android: как предотвратить прыжки/мигание просмотров при попытке заменить клавиатуру с видом

Если я жду, когда клавиатура скроет/покажет и изменит размер моего макета (с помощью onSizeChanged моего глобального макета), а затем попытайтесь сделать мой вид видимым, во многих случаях система не переоценивает мои макеты правильно (возможно, потому, что я делаю вид видимым в какой-то странной части жизненного цикла изменения макета?) Так что во многих случаях я просто не вижу показанного вида. Иногда на месте просмотра должно быть скрыто странное пространство над клавиатурой. Если я отправляю сообщение (Runnable), а затем вызываю requestLayout() или делаю вид видимым в следующем фрейме, это не хорошо, потому что проблескивание там снова, конечно.

Так что в основном я хочу знать точную рамку, когда клавиатура изменит размеры моих представлений, чтобы я мог сделать их видимыми/невидимыми и предотвратить мигание различных видов/размеров. Если я жду onSizeChanged, кажется, что уже слишком поздно.

Я действительно надеялся, что система будет корректно вести себя и переоценить размеры просмотров и разместить их в нужном месте, но если это сделано в onSizeChanged, это не сработает правильно.

ответ

0

я в конечном итоге делает следующее:

  1. Отключить изменение размера основного экрана между пряча ее части и ждут клавиатуры, чтобы показать
  2. позволяют изменения размера (и вызывая изменение размера), как только клавиатура была показана ,
@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    if (resizingEnabled) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
    } else { 
     setMeasuredDimension(getWidth(), getHeight()); 
    } 
}