2012-05-11 49 views
5

Tôi muốn biết cách tốt nhất để ẩn bàn phím sau khi nhập văn bản vào EditText.Cách tốt nhất để ẩn bàn phím trong Android

1) setonfocuschangelistener: Trình nghe này chỉ được kích hoạt, khi nhấn nút xong hay khi tiêu điểm thay đổi từ một EditText này sang một EditText khác? Khi tôi sử dụng phương pháp này, tôi không thể giấu bàn phím.

2) setOnTouchListener: Khi tôi sử dụng này, tôi có thể ẩn bàn phím, nhưng tôi nghi ngờ có thể có một vấn đề với điều này. Trong trường hợp này, tôi thêm trình nghe cảm ứng vào LinearLayout gốc. Mã sau tôi đã sử dụng:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.login); 

    txtUserName = (EditText)findViewById(R.id.txtUserName); 
    btnLogin = (Button)findViewById(R.id.btnLogin); 
    layoutView = (LinearLayout)findViewById(R.id.li); 

    layoutView.setOnTouchListener(new OnTouchListener() { 
     public boolean onTouch(View v, MotionEvent event) { 
      InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(txtUserName 
        .getWindowToken(), 0); 
      return true; 
     } 
    }); 
} 

Bên trong LinearLayout chính, tôi đang sử dụng hai LinearLayouts khác. Vấn đề mà tôi phải đối mặt với mã trên là ở một số điểm khi tôi nhấn, bàn phím không ẩn. Nghi ngờ của tôi là tôi chỉ thêm người nghe cảm ứng với bố cục gốc, không cho người nghe cảm ứng với bố cục bên trong khác hoặc các điều khiển khác (TextView). Khi tôi chạm vào các điều khiển khác hoặc một số điểm xung quanh TextView (ví dụ: bố trí bên trong), bàn phím không ẩn.

Điều đó có nghĩa là tôi có cần phải thêm touchListener vào tất cả bố cục hoặc điều khiển bên trong bố cục gốc không? Tình trạng này có thể được xử lý theo cách tốt hơn như thế nào?

+0

Cảm ơn bạn bè đã trả lời của bạn. Chúng ta có thể sử dụng mã trên để ẩn bàn phím. Sai lầm mà tôi đã tạo ra thay vì thêm trình nghe cảm ứng vào bố cục gốc, tôi đã thêm trình xử lý cảm ứng với một bố cục bên trong. Do đó, tôi hy vọng đây cũng là phương pháp tốt nhất để ẩn bàn phím khi chúng tôi chạm vào bên ngoài EditText. Một lần nữa cảm ơn tất cả các câu trả lời của họ. Vì vậy, nếu bất kỳ người dùng nào có đặc quyền để đánh dấu câu trả lời này là đúng, hãy làm điều đó. Chỉ sau khi xác minh mã. –

Trả lời

5

Hãy thử điều này:

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

nó có thể được sử dụng để ngăn chặn bàn phím cho đến khi người dùng thực sự chạm vào xem EditText.

HOẶC

inputManager.hideSoftInputFromWindow(editView.getWindowToken(), 0); 
+0

Tôi đã thử với điều này cũng trước đây. Nhưng nó không hoạt động. Nghi ngờ của tôi là tôi có cần phải thêm bất kỳ mã nào khác cùng với đoạn mã của bạn không? Sẽ tốt hơn nếu bạn cung cấp một giải thích nhỏ về cách nó hoạt động thay vì một dòng mã. –

+0

thử điều này sau khi tôi sẽ giải thích cho bạn –

+0

wow, hoạt động tuyệt vời cho tôi, – umesh

14

Bạn có thể sử dụng mã này

InputMethodManager imm = 
    (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.hideSoftInputFromWindow(mEditView.getWindowToken(), 0); 
+3

Điều này sẽ gây ra một ngoại lệ con trỏ null nếu bàn phím không hiển thị. Vui lòng thêm một sửa chữa cho rằng –

+1

@AjithMemana thực sự nó sẽ không cung cấp cho bất kỳ ngoại lệ tôi đã thử nó và cũng thấy các tài liệu. Cảm ơn –

+0

@Waseem bạn có thể vui lòng thêm liên kết vào tài liệu –

9

câu trả lời của tôi về câu hỏi này:

Thêm phương pháp này:

public static void hideSoftKeyboard(Activity activity) { 
    InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Activity.INPUT_METHOD_SERVICE); 
    inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
} 

Nếu bạn muốn ẩn bàn phím khi chạm vào màn hình, bạn có thể thực hiện theo cách này:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
hideSoftKeyboard(LoginActivity.this); 
return false; 
} 

Hy vọng điều này sẽ giúp bạn.

-1

Cách tốt nhất để ẩn bàn phím, chỉ dispatchDoneKey trong hoạt động của bạn. Bàn phím sẽ bị ẩn nếu nó ở trạng thái hiển thị.

public void dispatchDoneKey() { 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK)); 
    dispatchKeyEvent(new KeyEvent (KeyEvent.ACTION_UP, KeyEvent.KEYCODE_BACK)); 
} 
2

Một kiểm tra đơn giản cho rỗng hoặc một try-catch tránh được NullPointerException nếu không xem được tập trung.

public void hideKeyboard(Activity activity) { 
    InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
     if (activity.getCurrentFocus() != null) { 
      inputManager.hideSoftInputFromWindow(activity.getCurrentFocus() 
        .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
} 
Các vấn đề liên quan