【问题标题】:Android Kotlin - disable EditText but DON'T hide keyboardAndroid Kotlin - 禁用 EditText 但不隐藏键盘
【发布时间】:2019-12-14 15:46:03
【问题描述】:

我有一个 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)
        }
    }

【问题讨论】:

  • 可以使用 setEnabledsetFocusable 为 false 会为你工作
  • 我用smsMessageInput.isFocusable = false 替换了smsMessageInput.setTextColor(...) 并在smsMessageInput.isEnabled = true 下面添加了smsMessageInput.isFocusable = true 但是1) isFocusable 不再启用。我无法专注于输入,并且 2)文本颜色未更改为禁用的灰色。
  • 试试这个链接,肯定能用,stackoverflow.com/questions/5879250/…
  • 好的,这部分有帮助。通过使用smsMessageInput.isFocusableInTouchMode = true 而不是smsMessageInput.isFocusable = true,我能够再次启用焦点。我仍然遇到的问题是,在client.newCall(...) 运行之后,它不会禁用和分散输入。屏幕上只有一个很大的延迟(它基本上冻结)并且在清除文本之前什么都没有发生。用户根本看不到输入已被禁用。

标签: android android-layout kotlin


【解决方案1】:

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

smsMessageInput.isFocusable = false

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

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

你可以在你想要的时间requestFocus()

【讨论】:

    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2012-02-18
    相关资源
    最近更新 更多