33

AlertDialogにEditTextを表示してすぐにフォーカスを合わせてから、ソフトキーボードを自動的に開くようなコード作業をしようとしています。代わりに、画面を暗くするだけです。EditTextのAlertDialog、EditTextにフォーカスを合わせてソフトキーボードを自動的に開く

Builder builder = new Builder(this); 
final EditText input = new EditText(this); 
AlertDialog dialog = builder.create(); 
builder 
    .setTitle(R.string.dialog_title_addsubject) 
    .setMessage(R.string.dialog_addsubject) 
    .setView(input) 
    .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
      String value = input.getText().toString(); 
      if (input.getText().toString().trim().length() == 0) { 
       Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show(); 
      } else { 
       db.insertSubject(value); 
       getData(); 
      } 
     } 
    }) 
    .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int which) { 
     } 
    }); 
    input.requestFocus(); 
    dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
    dialog.show(); 

これを行う方法は多々ありましたが、どれもうまくいきませんでした。私はあなたがここで私を助けることができることを願っています。前もって感謝します!

答えて

59

後、私はそれが働いて得ることができた:

Builder builder = new Builder(this); 
      final EditText input = new EditText(this); 
      builder 
       .setTitle(R.string.dialog_title_addsubject) 
       .setMessage(R.string.dialog_addsubject) 
       .setView(input) 
       .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         String value = input.getText().toString(); 
         if (input.getText().toString().trim().length() == 0) { 
          Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show(); 
         } else { 
          db.insertSubject(value); 
          getData(); 
         } 
         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
        } 
       }) 
       .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { 

        public void onClick(DialogInterface dialog, int which) { 
         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
        } 

       }); 

       builder.show(); 
       input.requestFocus(); 
       InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 

このメソッドは必要ありません。ダイアログを表示するためにbuilder.show()を使用すると、Saberによって提供されたコードがソフトキーボードを開きます。各ボタンの別のコードスニペットは、ソフトキーボードを自動的に閉じます。

+0

AWESOME !!!キーボードを私のedittextで警告ダイアログに表示させようとしましたが、何も機能しませんでした。おかげで多く – gbotha

+0

完璧なソリューション!おかげさまで – pawegio

+0

それは私のために助けた。 –

11

あなたが代わりに dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);の本を使用することができます。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 

コールこの[OK]をdialog.show();

+1

キーボードショーをしかしダイアログは... – BlueHazard

+1

が私の答えましたしません。あなたのために便利ですか? – Sabre

+0

この作品はOKですが、私はtextViewにカーソルを表示できます。何か案が? – adev

0

秒後にそれを示す試してみてください - onShowで

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() { 
    input.requestFocus(); 

    dialog.getWindow(). 
    setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); 

    dialog.show(); 
}, 1000) 
1
public void selectContact(Context context) { 
     AlertDialog.Builder builder = new AlertDialog.Builder(context); 
     builder.setIcon(R.mipmap.icon); 
     builder.setTitle(R.string.title); 
     builder.setPositiveButton(android.R.string.ok, context); 
     builder.setNegativeButton(android.R.string.cancel,context); 
     builder.setView(View.inflate(context, 
       R.layout.dialog, null)); 
     AlertDialog alertDialog = builder.create(); 

     alertDialog.setOnShowListener(this); //Add listener 
     alertDialog.show(); 
    } 

オープンkeyborad: - 今

@Override 
    public void onShow(DialogInterface dialog) { 
     EditText editText = (EditText) ((AlertDialog) dialog).findViewById(R.id.number); 
     InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
     imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT); 
    } 
関連する問題