2011-03-28 232 views
16

有没有办法判断软键盘是否显示在活动中?有没有办法判断是否显示软键盘?

我试图

InputMethodManager manager = (InputMethodManager) 
getSystemService(getApplicationContext().INPUT_METHOD_SERVICE); 
manager.isActive(v) 

isActive收益仅在第一次键盘显示前假的,但如果出现KB,然后开除,isActive返回true也。

那么有没有其他方法来检查这个问题。

感谢

回答

12

根据这一POST

如果显示或不软键盘无法检测,但可以间接地知道,软键盘是知道你的活动View调整大小显示。

想象一下,您有一个ListView并在底部EditText,当用户单击EditText后显示一个软键盘时,您想要到列表的底部。

您需要实现ListView的子类,然后将其用于您的ListActivityActivityView

public class ThreadView extends ListView { 

    public ThreadView(Context context, AttributeSet attributeSet) { 
     super(context, attributeSet); 
    } 

    @Override 
    protected void onSizeChanged(int xNew, int yNew, int xOld, int yOld) { 
     super.onSizeChanged(xNew, yNew, xOld, yOld); 

     if (yOld > yNew) { 
      setSelection(((ListAdapter) getAdapter()).getCount() - 1); 
     } 
    } 
} 

希望这有助于

PS。 “检查配置更改”仅适用于手持键盘。

+0

我相信这是这个问题的唯一解决方案 – 2011-05-01 12:08:17

+1

这是要走的路,至少在Android 2.2和迄今为止。真正的痛苦是没有用于检测软键盘的API(并且就此而言,掌握了它的幻灯片动画)。感谢你的回答! – 2011-09-01 01:43:39

+0

为什么我只看到这一点?!花了很多时间尝试使用onMeasure,onLayoutChange等等,而这是唯一可行的解​​决方案。最简单的!多谢多啦A梦,哦,我的意思是@DiveInto。 :p – KarenAnne 2014-03-10 07:08:54

-2

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

这就为您AndroidManifest.xml中

,这对您的活动http://developer.android.com/reference/android/app/Activity.html#onConfigurationChanged(android.content.res.Configuration

你会需要@Override公共方法onConfigurationChanged(android.content.res.Configuration)的活动,以便能够处理,例如,这些值:
hardKeyboardHidden
键盘
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. 

UPDATE:

下面是具体例如什么I'm谈到:

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(); 
    } 
} 
+1

感谢响应,但没有捕获任何变化时,KB出现或消失 – 2011-03-28 18:00:49

+0

嗨,你应该寻找和例子来看看,当你的清单,你设置的android:configChanges =“keyboardHidden”这将触发您调用的任何Activity中的onConfigurationChanged方法。如果您重写该方法,则可以为您的活动传递新值,或者可以获取当前值。我的意思是,使用这个,你可以让你的应用程序监听事件,比如键盘可见性的变化,并在你的Activity中处理它们。 – yeradis 2011-03-29 07:04:38

+0

我刚刚更新了回复,添加了一个来自http://developer.android.com/guide/topics/resources/runtime-changes.html的示例,您将看到更好的信息“处理配置更改自己” – yeradis 2011-03-29 07:10:23

3

使用dumpsys shell命令,可以检测软件键盘的状态和坐标。

因为dumpsys需要permission.android.DUMP这是一个系统应用程序权限,所以您有两个选择:1.使用根设备授予此权限。 2.按照我的other answer中所述,使用adb覆盖问题。

现在,运行以下命令:dumpsys window InputMethod | grep "mHasSurface"以获取您正在查找的数据。

-1

这是我的想法。它未经测试。

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

     // Checks whether a keyboard is available which is not hard keyboard 
     if ((newConfig.keyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO)&&(newConfig.keyboardHidden != Configuration.HARDKEYBOARDHIDDEN_NO)) { 
      Toast.makeText(this, "soft keyboard visible", Toast.LENGTH_SHORT).show(); 
     } else if (newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_YES) { 
     Toast.makeText(this, "soft keyboard hidden", Toast.LENGTH_SHORT).show(); 
     } 
    } 
+0

如果您有新问题,请点击[问问题](https://stackoverflow.com/questions/ask)按钮。如果有助于提供上下文,请包含此问题的链接。 - [来自评论](/ review/low-quality-posts/17931905) – 2017-11-13 18:00:15

相关问题