2013-06-20 30 views
9

Tôi có một EditText bên trong một đoạn, nằm bên trong một tab actionbarsherlock. Khi tôi chạm vào bên trong hộp EditText, bàn phím mềm xuất hiện với một trong các phím có biểu tượng kính lúp (tìm kiếm). Khi tôi gõ một số văn bản và bấm vào khóa tìm kiếm, tôi có thể xử lý chuỗi đã gõ trong onEditorAction của tôi, nhưng bàn phím mềm vẫn còn trên màn hình. Làm thế nào tôi có thể đóng nó theo chương trình? Bằng cách này, nếu một câu trả lời là tôi có thể định cấu hình một số cài đặt cho EditText để nó tự động đóng khi tìm kiếm, tôi vẫn muốn biết liệu bàn phím mềm có thể đóng được bằng lời gọi phương thức như tôi cũng có nút tìm kiếm trên màn hình (không có gì để làm với bàn phím mềm) và tôi cũng muốn bàn phím mềm đóng khi nhấn cũng vậy.Cách đóng bàn phím mềm theo phân đoạn

Lưu ý: Trước khi bất kỳ ai vội vã tuyên bố câu hỏi này là lặp lại câu hỏi trước, tôi đã thấy nhiều Q & Về cách ẩn bàn phím mềm ở các điểm khác nhau. Nhiều người trong số các câu trả lời dường như quá phức tạp và trong nhiều người không rõ liệu ý tưởng là vĩnh viễn ẩn bàn phím hay chỉ tạm thời đóng nó cho đến khi người dùng chạm vào một trường EditText một lần nữa. Ngoài ra một số câu trả lời yêu cầu các cuộc gọi đến các phương thức không có sẵn trong các đoạn.

+0

Phần thú vị là, khi bạn tìm kiếm các bài viết khác, ẩn bàn phím trong Android theo cách thủ công là rất WTF-tại sao-thiết bị của tôi-là-không-được áp dụng vấn đề. Tôi khuyên bạn nên để tâm trí cứu trợ trong trường hợp tình huống không mong đợi. Hoặc thay đổi UX ứng dụng của bạn. :( – Youngjae

Trả lời

37

Trong mảnh vỡ của tôi, tôi đóng bàn phím đơn giản theo cách này:

public static void closeKeyboard(Context c, IBinder windowToken) { 
    InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(windowToken, 0); 
} 

closeKeyboard(getActivity(), yourEditText.getWindowToken()); 
2

Tôi đang sử dụng mã này trong một đoạn

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
          Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(text.getWindowToken(), 0); 

khi tôi nhấp vào biểu tượng thanh tác vụ và nó làm việc, tôi không hiểu tại sao nó không nên làm việc trong trường hợp của bạn (có lẽ tôi hiểu lầm câu hỏi).

7

Đây là mã hoạt động để ẩn bàn phím mềm cho Android.

try { 
      InputMethodManager input = (InputMethodManager) activity 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
0

Bạn có thể kiểm tra câu trả lời của tôi here. Đó là cách duy nhất làm việc cho tôi bên trong mảnh vỡ.

-1

Làm việc trong Fragment

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
0

Một cách rõ ràng để đóng bàn phím và clearfocus của một EditText bên trong một đoạn, là để đảm bảo rằng EditText XML của bạn có:

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

Sau đó thiết lập người nghe đến EditText của bạn (với Kotlin và từ một đoạn):

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     }) 
Các vấn đề liên quan