Java – how to disable closing the keyboard if you press done on the keyboard

When the user presses "finish" on the soft keyboard, the keyboard closes I want it to be turned off only when certain conditions are true (for example, the password is entered correctly)

This is my code (set a listener when the finish button is pressed):

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

I realized that the reason why this didn't work might be that it actually turned off its own soft keyboard before it ran this code, but that's why I need help I don't know another way

One possible answer may be:

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

That kind of thing, but I don't know for sure

Solution:

EditText et = (EditText)findViewById(R.id.et);
et.setOnEditorActionListener(new OnEditorActionListener() 
{        
  @Override
  public boolean onEditorAction(TextView v,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,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
  }
});

Solution

If you return true from your oneditoraction method, the action will not be processed again In this case, when the operation is editorinfo IME_ ACTION_ When done, you can return true to not hide the keyboard

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>