Androidはソフトキーボードを隠す方式です。


最近は自分で入力するインターフェースを使うと、システムのデフォルトの入力方法を隠して弾き出す必要があります。
入力方法を隠すには、いくつかの方法があります。
  • Android ManifestでActivityの入力モードを宣言します。詳細はご覧ください。http://blog.csdn.net/u012943767/article/details/48932389
  • は、コードにInputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); ideSoftInputFromWindow(view.getWindowToken(), 0);を設定し、Viewは、現在取得されているフォーカスポップアップソフトウェアディスクのView
  • である。
    上の2つの方法は1つの方法を実行するだけで、一回のシステムの入力法を隠します。しかし、筆者が実現したいのは、EditTextがフォーカスを取る時にははじけず、入力する時もはじけず、EditTextの中には一つの方法setShowSoftInputOnFocusがありますが、この方法は隠しています。しかし、この方法は実際には2.3以降のSDKにしか現れません。2.3バージョンに対応するためには、呼び出しが必要です。et.setInputType(InputType.TYPE_NULL)、正常な場合には、反射を用いてsetShowSoftInputOnFocusを呼び出す必要があります。コードは以下の通りです。
    Class cls = EditText.class;
    Method setSoftInputShownOnFocus;
    setSoftInputShownOnFocus = cls.getMethod(methodName,boolean.class);
    setSoftInputShownOnFocus.setAccessible(true);
    setSoftInputShownOnFocus.invoke(et, false);
    これで隠しましたが、EditTextのカーソルはまだあります。要求に達しました。しかし、私は満足して真機の上を走っています。効果はありません。キーボードは弾きます。真機は4.0.4です。シミュレータは4.1.2です。その後、資料を調べて、4.0と4.1.2のSDKの中でこの方法の名称が変更されました。4.0-4.1.2は、setSoftInputShownOnFocus 4.1.2を使用した後、setShowSoftInputOnFocusという2つの方法でかなり似ている。
    完全なコードは以下の通りです。
    int currentVersion = android.os.Build.VERSION.SDK_INT;
                String methodName = null;
                if (currentVersion >= 16) {
                    // 4.1.2
                    methodName = "setShowSoftInputOnFocus";
                } else if (currentVersion >= 14) {
                    // 4.0
                    methodName = "setSoftInputShownOnFocus";
                }
                if (methodName == null) {
                    et.setInputType(InputType.TYPE_NULL);
                } else {
                    try {
                        Class cls = EditText.class;
                        Method setSoftInputShownOnFocus;
                        setSoftInputShownOnFocus = cls.getMethod(methodName,
                                boolean.class);
                        setSoftInputShownOnFocus.setAccessible(true);
                        setSoftInputShownOnFocus.invoke(et, false);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    
    
    最後に、ユーザー定義の入力方法を完璧に実現しました。