2012-10-08 40 views
9

Tôi đang mở một Dialog từ trong một Activity. Khi hộp thoại mở ra, tôi gọiẨn bàn phím nhập mềm khi hộp thoại đóng

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

Vấn đề là khi tôi đóng hộp thoại bằng cách nhấn nút hủy hoặc nhấn vào bên ngoài hộp thoại, bàn phím sẽ chuyển sang bàn phím văn bản và không biến mất. nhấp vào nút quay lại phần cứng. Làm cách nào để loại bỏ bàn phím khi hộp thoại bị loại bỏ và tiêu điểm được trả về cửa sổ trước đó?

+0

bất kỳ giải pháp nào về điều này? – tactoth

Trả lời

1
AlertDialog.Builder builder = new AlertDialog.Builder(EllipticalActivity.this); 
builder.setTitle("title") 
     .setMessage("message") 
     .setCancelable(false) 
     .setNegativeButton("Close", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       InputMethodManager inputManager = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
                InputMethodManager.HIDE_NOT_ALWAYS); 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
+0

Nhìn vào mã của bạn, điều này sẽ chỉ đóng bàn phím nếu tôi nhấp vào một nút. Tôi muốn nó kết thúc vì nhiều lý do: nhấp vào nút, nhấp vào bên ngoài hoặc hộp thoại hoàn thành nhiệm vụ của nó. Nó có ý nghĩa hơn khi chỉ phát hiện khi hộp thoại _is_ bị loại bỏ, thay vì liệt kê tất cả các cách có thể mà cửa sổ có thể loại bỏ. – gatzkerob

1

Tôi đoán rằng phương pháp này của hoạt động có thể hữu ích cho bạn.

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     // TODO Auto-generated method stub 
     super.onWindowFocusChanged(hasFocus); 
     if(hasFocus) 
     { 
      Toast.makeText(MainActivity.this, "has focus", Toast.LENGTH_LONG).show(); 
         // write code to remove keyboard 
     } 
    } 
0

Trong trường hợp của tôi, giải pháp là đặt bàn phím ẩn trong hộp thoại miễn nhiệm

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
     View view = activity.getCurrentFocus(); 
     if (view != null) { 
      InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    } 
}); 
0

Từ Hoạt động onCreateView() phương pháp mà bạn có thể làm điều này:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) 

Hoặc Trong xml Manifest

android:windowSoftInputMode="stateAlwaysHidden" 

Nó sẽ tự động ẩn bàn phím mềm trên Dismiss của Dialog

4

trong AndroidManifest.xml, thiết lập thuộc tính này trong Hoạt động bạn mà hiển thị các Dialog

android: windowSoftInputMode = "stateAlwaysHidden"

Lưu ý! không phải là stateHiddent, là stateAlwaysHidden. Nó sẽ tự động ẩn bàn phím mềm trên Dismiss of Dialog.

Hy vọng rằng hãy cứu mạng sống của bạn.

+0

Cảm ơn @ Weiliang Chik, bạn đã tiết kiệm thời gian của tôi –

+0

@ParmarSubhash, không phải cuộc sống của bạn? – Faser

Các vấn đề liên quan