Android Kotlin-禁用EditText,但不要隐藏键盘

时间:2019-08-07 04:38:21

标签: android android-layout kotlin

我有一个EditText组件,用于输入将通过POST请求发送到后端服务器的文本。由于需要花费一些时间来处理POST请求并等待响应,因此我想禁用EditText输入,直到请求完成(如果成功,则清除文本)以用于UX。

我当前正在使用

val smsMessageInput = findViewById<EditText>(R.id.smsMessageInput)
smsMessageInput.isEnabled = false

但是,这会导致键盘消失,这不是我想要的。如何禁用输入,以便用户在不隐藏键盘的情况下无法输入文本?

我也尝试过在API调用运行之前更改文本颜色,但是,直到API调用完成后,这似乎才起作用。这是代码:

smsMessageInput.setTextColor(ContextCompat.getColor(this, R.color.colorLowEmphasis))

理想情况下,我想将EditText的文本颜色更改为低强调颜色(一种典型的浅灰色禁用颜色,广泛用于网站上的禁用输入),并防止用户在EditText中输入文本组件。

这是我尝试失败的完整代码:

    fun sendSms(smsToInput: EditText, smsMessageInput: EditText) {
        smsMessageInput.setTextColor(ContextCompat.getColor(this, R.color.colorLowEmphasis_Dark))
        smsMessageInput.isEnabled = false

        val formBody = FormBody.Builder()
            .add("to", smsToInput.text.toString())
            .add("message", smsMessageInput.text.toString())
            .build()
        val request = Request.Builder()
            .url("https://MYURL.com/POST_ROUTE")
            .post(formBody)
            .build()

        client.newCall(request).execute().use { response ->
            if (!response.isSuccessful) throw IOException("Unexpected code $response")
            val body = response.body?.string()
            smsMessageInput.isEnabled = true
            smsMessageInput.text.clear()
            println(body)
        }
    }

1 个答案:

答案 0 :(得分:0)

出于类似的目的,我正在使用isFocusable而不是isEnabled

smsMessageInput.isFocusable = false

但是无论如何要显示软键盘:

val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)

您可以在需要的时候requestFocus()