Edittextビューでダイアログを表示しています。ただし、ユーザーが編集ビュー内を押した場合にのみ、ソフトキーボードが開きます。そこで、次のコードでInputMethodManagerを呼び出してみました。
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
DialogFieldは入力フィールドです。しかし、いつこれを行うべきなのでしょうか?ダイアログのonStart()メソッドで試しましたが、何も起こりません。以前にdialogFieldのフォーカスを要求しようとしましたが、何も変わりません。
私もこのコードを試しました
dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
public void onFocusChange (View v, boolean hasFocus)
{
if (hasFocus)
{
Main.log("here");
dialogInput.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
/*
InputMethodManager mgr =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(dialogField,0);
*/
}
}
});
両方のバージョンで。ただし、ソフトキーボードは表示されません。 Main.logは単なるログであり、関数が実際に呼び出されることを示しています。そして、はい、それは呼ばれます。
ダイアログが開く前に、SHOW_FORCEDフラグを使用してキーボードを取得できました。しかし、それは終了時に閉じません。そして、ダイアログを表示する前にしかできません。コールバック内では機能しません。
素晴らしい質問です。私もそれをやろうとしていて、解決策を見つけました。
ダイアログビルダークラスを使用するAlertDialog.Builder
次のようなダイアログを起動する必要があります。
AlertDialog.Builder builder = new AlertDialog.Builder();
AlertDialog dialog;
builder.set...
dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();
これはうまくいきました。
注:import Android.view.WindowManager.LayoutParams;
そこの定数値。
AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.show();
Window window = dialog.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);