0

This is what I've tried:

override fun onBackPressed() {
    nicknameInput.clearFocus()
    finish()
}

It only closes soft keyboard but not activity and it also not clears the focus.

The solution here:

Android - onBackPressed close soft keyboard AND activity

only works for SearchView

EDIT:

This is almost the whole activity:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_set_nickname)

    prefs = getSharedPreferences("userData", 0)

    val preset = intent.getStringExtra("preset")
    nicknameInput.setText(preset)

    openSoftKeyboard(this, nicknameInput)

    nicknameBG.setOnClickListener {
        finish()
    }

    btnNotNowNickname.setOnClickListener {
        finish()
    }

    btnSaveNickname.setOnClickListener {
        checkNickname()
    }

    nicknameInput.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
        // Log.d("pikabo", keyCode.toString())

        if(keyCode == KeyEvent.KEYCODE_ENTER) {
            checkNickname()
            return@OnKeyListener true
        }

        false
    })

} // ON CREATE




private fun openSoftKeyboard(context: Context, view: View) {
    view.requestFocus()
    this.window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
}

Only the function checkNickname() is missing which isn't necessary here for sure

1 Answers1

0

Using this you can listen for key pressed on edittext and pass your edittext view to hide function to close it. replace view with your edittext reference.

view.setOnKeyListener(object : View.OnKeyListener {
        override fun onKey(p0: View?, keyCode: Int, event: KeyEvent?): Boolean {

            if (event!!.action == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK ) {
              hide(view)
              onBackPressed()
              return true
        }
         return false
    })

and using it you can close your keyboard

  private fun hide(editText: EditText) {
            try {
                val inputMethodManager =  this.getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
                inputMethodManager.hideSoftInputFromWindow(editText.windowToken, 0)
            } catch ( e:Exception) {
                Log.d("TAG",e.message+"")
            }
        }
Haider Saleem
  • 773
  • 1
  • 9
  • 17