如何让用户在android kotlin中移动光标而不编辑编辑文本

如何让用户在android kotlin中移动光标而不编辑编辑文本,android,kotlin,android-edittext,cursor,Android,Kotlin,Android Edittext,Cursor,我在做一个计算器。众所周知,每个计算器都使用由开发人员自己开发的键盘。我使用editText根据用户单击的按钮进行输出。这不是问题。问题是我希望用户移动光标,选择输入的文本的某些部分,但不要使用android键盘进行编辑。我使用了可聚焦和可浏览的方法,但没有任何帮助。我希望你们中有人能帮助我。我在用科特林。谢谢。您可以使用设置ShowSoftInputInfo(布尔值)设置键盘是否显示编辑文本,如下所示: editText.showsoftwindputonfocus=false 这样,and

我在做一个计算器。众所周知,每个计算器都使用由开发人员自己开发的键盘。我使用editText根据用户单击的按钮进行输出。这不是问题。问题是我希望用户移动光标,选择输入的文本的某些部分,但不要使用android键盘进行编辑。我使用了可聚焦和可浏览的方法,但没有任何帮助。我希望你们中有人能帮助我。我在用科特林。谢谢。

您可以使用
设置ShowSoftInputInfo(布尔值)
设置键盘是否显示
编辑文本,如下所示:

editText.showsoftwindputonfocus=false
这样,android键盘将不会显示,用户仍然可以移动光标并选择文本。文件


注意:此方法仅适用于API 21及以上版本(截至2020年10月,超过94%的活动设备)。

您希望所有常用的选择和编辑内容都可用,但如果用户键入内容,您不希望内容发生实际更改

您可以向
编辑文本
中添加,并覆盖
过滤器
方法:

当缓冲区要用
的范围
开始…结束
中的新文本替换
dest
的范围
dstart…dend
时,调用此方法返回您希望放在那里的字符序列,如果合适,包括一个空字符串,或者返回null以接受原始替换

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

editText.filters += InputFilter { _, _, _, dest, dstart, dend -> dest.subSequence(dstart, dend) }

编辑:设置
showsoftwoinputonfocus
可能很有用,但它的字面意思是“当视图聚焦时,不要显示软(屏幕上)键盘”。您仍然可以通过以下几种方式编辑文本:

  • 在硬件键盘上键入(某些设备有硬件键盘,您可以通过在计算机键盘上键入在模拟器中进行测试)
  • 通过点击光标粘贴内容
  • 保持
    EditText
    的焦点,离开应用程序,然后返回-软键盘可能会弹出
等等。此外,辅助功能服务可能会覆盖某些内容,并允许用户显示其输入选择,即使您说“我不希望键盘显示”


据我所知,可靠地阻止用户更改
EditText
内容的唯一方法是使用
InputFilter
,它实际上阻止了所有更改。您也可以将
showsoftwoinputonfocus
设置为false,以尝试避免键盘出现-但正如我所说,在某些情况下它仍会出现。
InputFilter
将阻止它产生任何效果

使用android:inputType=“none”、android:textIsSelectable=“true”、android:focusable=“false”@ImtiyazKhalani尝试可能的重复。好吧,这个问题与我的问题不完全相同,他只想让edittext只读,而我的情况与问题描述不同。至于你的第二个答复,谢谢!但是我的问题已经解决了。你的方法也是正确的,但是当你想过滤文本的一部分时,最好使用它@Siddharth Sharma方法是最好的,它适合我,因为我的minSDK版本是21。我将使用您的方法过滤用户粘贴的内容,因为在计算器中允许粘贴。我编辑了更多信息-试图隐藏键盘不能保证用户不能更改内容,如果这很重要,您不能真正依赖它