Android:隐藏软键盘时避免混蛋

时间:2017-09-13 09:42:21

标签: android performance android-softkeyboard android-relativelayout soft-keyboard

我正在使用android布局,当我隐藏继续付款按钮以及底部视图时,当主板显示时,类似用户按下或完成键盘键盘中的按钮将隐藏现在意味着我正在显示保存地址按钮底部视图,要检查键盘的可见性我正在使用 following solluation和它的工作正常,但问题是当 KeyBoard 隐藏它时需要抽搐作为布局重新计算

softKeyboardStateWatcher = new SoftKeyboardStateWatcher(mBinding.activityRoot);

        softKeyboardStateWatcher.addSoftKeyboardStateListener(new SoftKeyboardStateWatcher.SoftKeyboardStateListener() {

            @Override
            public void onSoftKeyboardOpened(int keyboardHeightInPx) {
                mBinding.actionProceedToPayment.setVisibility(View.GONE);
                mHomeActivityImplementation.handleBottomTabs(false);
            }

            @Override
            public void onSoftKeyboardClosed() {
                mBinding.actionProceedToPayment.setVisibility(View.VISIBLE);
                mHomeActivityImplementation.handleBottomTabs(true);
            }
        });

above code显示键盘显示布局时,layout正在调整大小时会出现故障,为避免这种情况,我使用onPostDelay(),如下所示

         @Override
            public void onSoftKeyboardClosed() {
                mBinding.activityRoot.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        mBinding.actionProceedToPayment.setVisibility(View.VISIBLE);
                        mHomeActivityImplementation.handleBottomTabs(true);
                    }
                }, 100);
            } 

但仍面临同样的问题。我也申请CountDownTimer()但问题没有解决,有没有办法避免这个混蛋?

2 个答案:

答案 0 :(得分:3)

首先,您正在使用的库,SoftKeyboardStateWatcher不可靠。您需要的功能未在Android框架中公开。它做了一个猜测,并且在很多情况下它会出错并且说键盘不存在,反之亦然。因此任何依赖该类的代码都会出错。我的建议是根本不提供这种类型的功能,因为它的工作效果取决于设备,操作系统版本,使用的键盘等。

其次,我不认为使用该库可以避免混蛋。在键盘扩展完成之后,它对键盘显示时的猜测不会通知您。因此,您将等待键盘更改,然后进行其他更改。这将永远引起混蛋。您唯一能做的就是设置按钮的动画,而不仅仅是设置可见性。

答案 1 :(得分:1)

混蛋是因为当键盘隐藏或显示时布局正在渲染并调整其高度,这完全取决于设备,因为我们有不同的设备,不同的处理器和GPU分别具有不同的时钟速度和帧速率,你将在不同的设备上找到不同的行为,在某些设备上你可能没有混蛋,在某些设备上你有一个小的混蛋,这完全取决于你的设备中的处理器和GPU。

您可以在键盘隐藏和显示期间向您正在显示和隐藏的视图添加动画,这样可以稍微平滑一下这个混蛋。