1

テキスト入力用のダイアログを表示していますが、ハードキーボードが開いていない場合は、ソフトキーボードを自動的に表示したいと思います。Samsung Galaxyタブに表示するには、SHOW_FORCEDフラグを使用する必要がありましたが、SHOW_IMPLICITフラグが機能しませんでした。また、ダイアログを閉じるときに、キーボードを強制的に表示した場合はキーボードを閉じたいと思います。ただし、以下で使用しているコードは、Galaxyタブのキーボードを閉じません。Explicitフラグを使用して表示したためだと思います。

    /* from the dialog constructor*/

    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.restartInput(mEditText);

    //only display if there is no hard keyboard out 
    Configuration config = getResources().getConfiguration();
    if (config.hardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_YES)
    {
      mForcedKeyboardDisplay = true;
      imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    }


    /* from the onDismiss() method*/

    //if we previously forced keyboard display, force it to close
    if (mForcedKeyboardDisplay)
    {
       InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
       imm.restartInput(mEditText);

       imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY);
       //this doesn't work either 
       //imm.hideSoftInputFromWindow(mEditText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
       //nor does this
       //imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
    }
4

1 に答える 1

5

まず、を使用しないでくださいtoggleSoftInput()。それはその名前が言うことをします-IMEの状態を切り替えます。実際に表示されるようにしたい場合は、を使用してshowSoftInputFromWindow()ください。

第二に、を呼び出す理由はありませんrestartInput()

showSoftInput()フラグを使用して呼び出す0ことは、テキストビューをタップしてIMEを表示するときにフレームワークが行うこととまったく同じです。実際、ここにコードがあります:https ://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/widget/TextView.java

テキストビューをタップしてIMEを表示できるが、自分の通話が機能しない場合は、通話が機能しない理由を理解する必要があります。SHOW_FORCEDを使用しないことを強くお勧めします。これは多少特殊な動作をしますが、これはあなたが望んでいるとは思えません。(たとえば、ユーザーがホームを押すと、IMEは開いたままになります。通常は望ましくありません。)

IMEを非表示にして機能しないようにする呼び出しの最も可能性の高い理由は、その時点でウィンドウに入力フォーカスがないことです...この場合、ログにメッセージが表示される可能性があります。実際、問題が発生するとメッセージが出力されることが多いため、とにかくログを確認してください。

于 2011-03-16T21:53:42.697 に答える