我有一个EditText组件,用于输入将通过POST请求发送到后端服务器的文本。由于处理 POST 请求并等待响应需要时间,因此出于 UX 目的,我想禁用 EditText 输入,直到请求完成(如果成功,它会清除文本(。
我目前正在使用
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)
}
}
出于类似目的,我正在使用isFocusable
而不是isEnabled
。
smsMessageInput.isFocusable = false
但无论如何要显示软键盘:
val inputMethodManager = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY)
而且您可以及时requestFocus()
。