2013-10-18 20 views
13

Khi người dùng nhấn "Xong" trên bàn phím mềm, bàn phím sẽ đóng. Tôi muốn nó để nó sẽ chỉ đóng nếu một điều kiện nhất định là đúng (ví dụ như mật khẩu đã được nhập chính xác).Cách KHÔNG đóng bàn phím khi DONE trên bàn phím được nhấn

Đây là mã của tôi (thiết lập một người biết lắng nghe khi nút "Done" được nhấn):

final EditText et = (EditText)findViewById(R.id.et); 
et.setOnEditorActionListener(new OnEditorActionListener() 
{   
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    { 
     if(actionId==EditorInfo.IME_ACTION_DONE) 
     { 
     if (et.getText().toString().equals(password)) // they entered correct 
     { 
      // log them in 
     } 
     else 
     { 
      // bring up the keyboard 
      getWindow().setSoftInputMode(
      WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 

      Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); 
     } 
     } 
     return false; 
    } 
}); 

Tôi nhận ra rằng lý do này không làm việc có lẽ là bởi vì nó chạy mã này trước nó thực sự tự đóng bàn phím mềm, nhưng đó là lý do tại sao tôi cần trợ giúp. Tôi không biết cách nào khác.

Một chủ đề có thể cho câu trả lời có thể được làm việc với:

activityRootView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() { 

và đó đại loại như vậy, nhưng tôi không biết chắc chắn.


SOLUTION:

EditText et = (EditText)findViewById(R.id.et); 
et.setOnEditorActionListener(new OnEditorActionListener() 
{   
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) 
    { 
    if(actionId==EditorInfo.IME_ACTION_DONE) 
    { 
     if (et.getText().toString().equals(password)) // they entered correct 
     { 
      // log them in 
      return false; // close the keyboard 
     } 
     else 
     { 
      Toast.makeText(Main.this, "Incorrect.", Toast.LENGTH_SHORT).show(); 
      return true; // keep the keyboard up 
     } 
    } 
    // if you don't have the return statements in the if structure above, you 
    // could put return true; here to always keep the keyboard up when the "DONE" 
    // action is pressed. But with the return statements above, it doesn't matter 
    return false; // or return true 
    } 
}); 

Trả lời

17

nếu lợi nhuận của bạn true từ phương pháp onEditorAction của bạn, hành động sẽ không được xử lý một lần nữa. Trong trường hợp này, bạn có thể trả lại true để không ẩn bàn phím khi hành động là EditorInfo.IME_ACTION_DONE.

+3

Câu trả lời hay. Tôi không thể tìm thấy bất kỳ tài liệu nào về phương pháp được cho là sẽ trở lại. –

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