Home > Blockchain >  Hiding SoftKeyboard when button inside dialog is clicked
Hiding SoftKeyboard when button inside dialog is clicked

Time:11-12

I have custom dialog where inside its xml has a Submit button that whenever clicked, it should dismiss the softKeyboard. I have the following code:

MainActivity.kt (Inherits from BaseActivity)

val updateDialog = Dialog(this, R.style.CustomDialog)
                updateDialog.setContentView(R.layout.dialog_update)

val tvSubmitToFirestore = updateDialog.findViewById<HelveticaBoldTextView>(R.id.tv_update_item)

tvSubmitToFirestore.setOnClickListener {

                    hideKeyboard(currentFocus ?: View(this))
                }

BaseActivity:

open class BaseActivity : AppCompatActivity() {

    //hide keyboard when instance of an event
    fun Context.hideKeyboard(view: View) {
        val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
    }
}

But the keyboard remains on its position after clicking the said button.

Update:

//update item
            val tvUpdate = showItemDialog.findViewById<HelveticaNormalTextView>(R.id.tv_update)
            tvUpdate.setOnClickListener {
                //close search dialog
                showItemDialog.dismiss()

                val updateDialog = Dialog(this, R.style.CustomDialog)
                updateDialog.setContentView(R.layout.dialog_update)
                updateDialog.setCancelable(false)

                //spinner settings
                val spinner = updateDialog.findViewById<Spinner>(R.id.sp_update)
                populateSpinner(spinner, dialogProductCategory.text.toString())

                //set default values of update dialog fields == the current product's properties(name, category, price)
                val etProductName = updateDialog.findViewById<TextInputEditText>(R.id.et_update_product_name)
                val etProductPrice = updateDialog.findViewById<TextInputEditText>(R.id.et_update_product_price)

                etProductName.setText(dialogProdName.text.toString())
                etProductPrice.setText(dialogProductPrice.text.toString())

                //update item
                val tvSubmitToFirestore = updateDialog.findViewById<HelveticaBoldTextView>(R.id.tv_update_item)

                //TODO allow user to update an item with the same name provided that it should only exist once
                // and must be unique

                tvSubmitToFirestore.setOnClickListener {

//                    hideKeyboard(currentFocus ?: tvSubmitToFirestore)
                    hideKeyboard1(it, this@MainActivity)

                    val newProductName = etProductName.text.toString().trim()
                    val newProductCategory = spinner.selectedItem.toString().uppercase()
                    val newProductPrice = etProductPrice.text.toString().toDouble()

                    GlobalScope.launch {
                        validateProduct(newProductName, newProductCategory, newProductPrice)
                    }

                    //TODO : allow user to reuse the product name when updating

                }

CodePudding user response:

You can use the new WindowInsetsController library to hide and show keyboard. Use this function:

fun hideKeyboard(view: View, activity: Activity) {
    WindowInsetsControllerCompat(activity.window, view).hide(WindowInsetsCompat.Type.ime())
}

In your case, you call use it like this:

tvSubmitToFirestore.setOnClickListener { view ->
    hideKeyboard(view, this) // 'this' refers to MainActivity
}
  • Related