当前位置:  开发笔记 > 编程语言 > 正文

Android:检测软键盘打开

如何解决《Android:检测软键盘打开》经验,为你挑选了3个好方法。

当软键盘打开时,我想要滚动视图向下滚动到底部.

为此,我可以使用:fullScroll(View.FOCUS_DOWN);

但是,如何在软键盘打开事件触发后触发该命令?



1> BoD..:

这是我的解决方案:

1 /一个简单的界面

public interface KeyboardVisibilityListener {
    void onKeyboardVisibilityChanged(boolean keyboardVisible);
}

2 /一个实用工具方法(把它放在你想要的地方,例如在一个名为的类中KeyboardUtil)

public static void setKeyboardVisibilityListener(Activity activity, KeyboardVisibilityListener keyboardVisibilityListener) {
    View contentView = activity.findViewById(android.R.id.content);
    contentView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        private int mPreviousHeight;

        @Override
        public void onGlobalLayout() {
            int newHeight = contentView.getHeight();
            if (mPreviousHeight != 0) {
                if (mPreviousHeight > newHeight) {
                    // Height decreased: keyboard was shown
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(true);
                } else if (mPreviousHeight < newHeight) {
                    // Height increased: keyboard was hidden
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(false);
                } else {
                    // No change
                }
            }
            mPreviousHeight = newHeight;
        }
    });
}

3 /以这种方式使用活动(一个好地方在onCreate):

KeyboardUtil.setKeyboardVisibilityListener(this, mKeyboardVisibilityListener);


我喜欢你的建议..它的突出重要的是指出这只适用于adjustResize,不是吗?您可以在此处看到此提案的其他要求吗?
失败的'android:inputType ="textPassword"`Neverthless一个整洁的方式!

2> Rich Schuler..:

根据这篇文章以及关于android-developers的这篇文章,它似乎不可能做你想要的.您可能希望重新检查您的用例以了解您正在做的事情.也许其中一个softInputMode标志对你有用.


在2012年12月.是的,2012年,Android仍无法通知软键盘是否可见.惊人!
@sebrock 2014年也是如此
2016年临近
是2016年在这里:(
差不多2017年.我们有新的模拟器,新的IDE,仍然没有检查键盘状态的解决方案.
2019在这里。第一个人将在不久的将来迈向火星。几周前,全世界已经看到了带有可折叠触摸屏的设备。机器人无处不在。但是我们仍然无法轻松检测Android中的键盘可见性。赫拉!
2017年,等待奇迹出现
还是2017年.活着的一年.
2018年已经到来,但API无处可寻.我们被迫继续使用可怕的黑客攻击电池和性能.感谢Google开发人员强迫我们使用8年以上的密集黑客攻击,每次轻微的布局更改都会不断触发,而不是提供指示键盘何时打开或关闭的API.`adjust_resize`已经内置了这个,你只需选择不从头开始公开它.然后用户抱怨他们的应用程序正在耗尽电池,如Messenger和其他以键盘为中心的应用程序.

3> yeradis..:

看着日期,可能你有一个问题的解决方案,否则:

以下是我对另一个相关问题的回答:有没有办法判断是否显示了软键盘?

但我在这里复制完整的回复以避免死链接:

请检查您的活动的配置更改

这适用于您的AndroidManifest.xml

这适用于您的Activity类http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration)

您将需要@Override您的Activity的onConfigurationChanged(android.content.res.Configuration)的公共方法,以便能够处理,例如,这个值:
hardKeyboardHidden,
keyboard,
keyboardHidden

对于所有可能的值,请查看http://developer.android.com/reference/android/content/res/Configuration.html

你会看到类似这样的东西:

HARDKEYBOARDHIDDEN_NO   
HARDKEYBOARDHIDDEN_UNDEFINED    
HARDKEYBOARDHIDDEN_YES  
KEYBOARDHIDDEN_NO   
KEYBOARDHIDDEN_UNDEFINED    
KEYBOARDHIDDEN_YES  
KEYBOARD_12KEY  
KEYBOARD_NOKEYS 
KEYBOARD_QWERTY 
KEYBOARD_UNDEFINED

在那里你可以阅读这样的东西:

public int  hardKeyboardHidden  A flag indicating whether the hard keyboard has been      hidden.
public int  keyboard    The kind of keyboard attached to the device.
public int  keyboardHidden  A flag indicating whether any keyboard is available.

更新:

这是我正在谈论的具体样本:

http://developer.android.com/guide/topics/resources/runtime-changes.html

    
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    // Checks the orientation of the screen
    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
        Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
    }
    // Checks whether a hardware keyboard is available
    if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO) {
        Toast.makeText(this, "keyboard visible", Toast.LENGTH_SHORT).show();
    } else if (newConfig.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES) {
        Toast.makeText(this, "keyboard hidden", Toast.LENGTH_SHORT).show();
    }
}

我希望这对你有帮助


这是hardKeyboard的一个示例,这对softKeyboard不起作用
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有