Android 安卓键盘没有';关不上
我一直在为Android开发一个定制键盘,在更换键盘时我遇到了一些奇怪的行为。。。 在第一次运行时(从Android Studio构建或通过Fabric分发后),当我使用以下命令时,键盘不会关闭:Android 安卓键盘没有';关不上,android,ime,Android,Ime,我一直在为Android开发一个定制键盘,在更换键盘时我遇到了一些奇怪的行为。。。 在第一次运行时(从Android Studio构建或通过Fabric分发后),当我使用以下命令时,键盘不会关闭: InputMethodManager imeManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); imeManager.switchToNextInputMethod(getToken()
InputMethodManager imeManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imeManager.switchToNextInputMethod(getToken(), false /* onlyCurrentIme */);
它将打开键盘后面的下一个输入法。。。但我的键盘会被压在另一个键盘上。。。它甚至会留在那里,如果你去主屏幕。。。但一旦设备重新启动,键盘就不会发生任何问题。。。我一直在读这篇文章,我发现以前版本的安卓系统中的键盘有一些问题,还有问题吗
您可以在下面看到相关代码:
public class CustomKeyboard extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
private KeyboardView kv;
private Keyboard keyboard;
public final static int CodeRowFourGlobe = 55041;
@Override
public View onCreateInputView() {
kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
keyboard = new Keyboard(this, R.xml.custom_keyboard);
kv.setPreviewEnabled(false);
kv.setKeyboard(keyboard);
kv.setOnKeyboardActionListener(this);
return kv;
}
private IBinder getToken() {
final Dialog dialog = getWindow();
if (dialog == null) {
return null;
}
final Window window = dialog.getWindow();
if (window == null) {
return null;
}
return window.getAttributes().token;
}
@Override
public void onPress(int primaryCode) {
}
@Override
public void onRelease(int primaryCode) {
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
@Override
public void onKey(int primaryCode, int[] keyCodes) {
InputConnection ic = getCurrentInputConnection();
if (primaryCode == Keyboard.KEYCODE_DELETE) {
ic.deleteSurroundingText(1, 0);
} else if (primaryCode == CodeRowFourGlobe) {
InputMethodManager imeManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
imeManager.switchToNextInputMethod(getToken(), false /* onlyCurrentIme */);
} else {
/* not relevant */
}
}
@Override
public void onText(CharSequence text) {
}
@Override
public void swipeLeft() {
}
@Override
public void swipeRight() {
}
@Override
public void swipeDown() {
}
@Override
public void swipeUp() {
}
}
你知道这是我如何更换键盘的问题还是安卓系统的已知问题吗?试试这个,我随时都可以用
public static void hideKeyboard( Context context ) {
try {
InputMethodManager inputManager = ( InputMethodManager ) context.getSystemService( Context.INPUT_METHOD_SERVICE );
View view = ( (Activity) context ).getCurrentFocus();
if ( view != null ) {
inputManager.hideSoftInputFromWindow( view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS );
}
} catch ( Exception e ) {
e.printStackTrace();
}
}
ime的可见性由系统本身处理 几天前,我遇到了一个类似的问题,并通过从头开始编写IME来修复它&在后台线程上执行所有耗时的工作(如getTextBeforeCursor()/getTextAfterCursor、本地数据库读/写等) 如果您多次从/切换到另一个IME,并且同样的事情发生,那么这就是我要讨论的问题 因此,您可能正在调用一些需要时间或使IME卡住的东西。只需参考您正在拨打的电话的文档,检查它们是否需要不确定的时间
希望这有帮助。您将如何使用它?我不能用“this”来调用它,因为我的类不能强制转换为活动此方法..并调用此方法hideKeyboard(youractivity.this)或使用GetApplicationContext..无论何时尝试隐藏键盘都不要在此类中使用..在活动或片段中使用..直接我没有任何片段。。。该应用程序只有实现键盘的主活动和服务类,因此我只能从我的服务类以外的其他地方调用它。每次在onKey()方法中,您都在重新创建
InputMethodManager
的实例。最好在onCreate()中创建一个类级实例。