如何让用户移动光标但不编辑Android Kotlin中的editText

问题描述

我在做计算器。众所周知,每个计算器都使用由开发人员自己开发的键盘。我正在使用editText根据用户单击的按钮来输出。这不是问题。问题是我希望用户四处移动光标,选择输入文本的某些部分,但不使用android键盘对其进行编辑。我使用了focusable和cursorenabled方法,但没有任何帮助。我希望你们中有人可以帮助我。我正在用Kotlin。谢谢。

解决方法

您可以使用EditText来设置键盘是否显示setShowSoftInputOnFocus(Boolean),如下所示:

editText.showSoftInputOnFocus = false

这样,Android键盘将不会显示,并且用户仍然可以左右移动光标并选择文本。文档here

注意:该方法仅适用于API 21及更高版本(到2020年10月,超过94%的活动设备)。

,

您想拥有所有常用的选择和编辑内容,但是您不希望用户键入内容时内容真正改变吗?

您可以将InputFilter添加到EditText,并覆盖filter方法:

当缓冲区要用dstart … dend的{​​{1}}范围内的新文本替换dest的范围start … end时,调用此方法。 返回您想要放置在其中的CharSequence ,如果合适,包括一个空字符串,或者为null以接受原始替换。

链接中还有更多详细信息,但是基本上您可以返回source中的dstart...dend,即要替换的原始部分,因此内容没有实际更改。像这样

dest

编辑:设置editText.filters += InputFilter { _,_,dest,dstart,dend -> dest.subSequence(dstart,dend) } 可能很有用,但这实际上只是意味着“在焦点对准视图时不显示软(屏幕)键盘”。您仍然可以通过以下几种方式编辑文本:

  • 在硬件键盘上键入(某些设备装有它们,您可以通过在计算机键盘上键入在模拟器中进行测试)
  • 通过点击光标粘贴一些东西
  • showSoftInputOnFocus保持焦点,离开应用程序,然后再回来-软键盘可能会弹出

,依此类推。加上辅助功能服务可能会覆盖一切,即使您说“我不想显示键盘”,也允许用户显示他们选择的输入内容

(据我所知)可靠地阻止用户更改EditText 内容的唯一方法是使用EditText来阻止所有更改。您也可以将InputFilter设置为false,以尝试避免出现键盘-但就像我说的那样,在某些情况下仍会出现键盘。 showSoftInputOnFocus将使其停止生效