33

Tôi đang cố gắng lấy một đoạn mã cần tập trung EditText trong AlertDialog ngay khi nó hiển thị và sau đó tự động mở bàn phím mềm . Thay vào đó, nó chỉ làm cho màn hình tối hơn.AlertDialog với EditText, mở bàn phím mềm tự động với tiêu điểm trên EditText không hoạt động

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(); 

Tôi đã thử nhiều cách để làm điều này nhưng không có cách nào hoạt động. Tôi hy vọng các bạn có thể giúp tôi ở đây. Cảm ơn trước!

Trả lời

59

Ok tôi quản lý để làm cho nó làm việc:

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); 

Phương pháp này không cần một hộp thoại để tôi có thể sử dụng builder.show() để hiển thị hộp thoại và mã được cung cấp bởi Saber sẽ mở bàn phím mềm. Một đoạn mã khác trong mỗi nút sẽ tự động đóng bàn phím mềm.

+0

TUYỆT VỜI !!! Đã cố gắng để có được bàn phím để hiển thị với edittext của tôi trong hộp thoại cảnh báo và không có gì làm việc. cảm ơn rất nhiều – gbotha

+0

giải pháp hoàn hảo! – pawegio

+0

Cảm ơn. Nó đã giúp tôi. –

11

Bạn có thể sử dụng thay vì dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);:

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

Gọi này sau khi dialog.show();

+1

Bây giờ các chương trình bàn phím nhưng hộp thoại không ... – BlueHazard

+1

phải câu trả lời của tôi hữu ích cho bạn? – Sabre

+0

Ok tác phẩm này nhưng tôi có thể hiển thị con trỏ trên textView. Bất kỳ ý tưởng? – adev

0

Cố gắng thể hiện nó sau một giây -

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 mở trong onShow: -

@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); 
    } 
Các vấn đề liên quan