Android:自定义视图在软键盘出现后返回初始布局

时间:2012-06-25 20:58:10

标签: android keyboard focus android-softkeyboard

我的自定义视图组出现了一个奇怪的问题:

它是一个扩展的FrameLayout,表示一个自定义切换按钮,它在左侧和右侧移动了一个处理程序。 (ala iPhone开关切换按钮) 我通过这行代码移动这个处理程序:

  mHandler.layout(0, 0, right, 0);

但是当我的活动中的另一个视图(EditText)获得焦点时,会出现软键盘。好吧,这个事件使我的自定义视图组处于初始配置状态(如果我在“状态开启”配置中切换了自定义视图组,它会打开初始的“状态关闭”配置。

就像系统不记得在Activity.onCreate()之后布局发生了变化。

有没有人找到解决方案?

2 个答案:

答案 0 :(得分:1)

我解决了这个问题。这不是关于onSaveInstanceState和onRestoreInstanceState的问题,因为活动不会出现onPause或其他任何问题。 我注意到在我的自定义视图失去焦点后,它会调用其onLayout方法并使用标志change = false。

我所采取的最简单的方法是用这个方法覆盖该方法:

@Override
protected void onLayout(boolean changed, int left, int top, int right,
        int bottom) {
    if( changed ){
        super.onLayout(changed, left, top, right, bottom);
    }

}

解决了这个问题。我的布局视图仅在我想要时更改,而不是在失去焦点时更改。

答案 1 :(得分:0)

您应该在自定义视图中覆盖onSaveInstanceStateonRestoreInstanceState,并执行保存内部状态所需的一切。

如果您从现有的View类派生,那么不要忘记调用父类实现来保存实例状态。