Android 数字类型的 EditText 允许先输入负号

Allow entering negative sign first for Android EditText of number type

我有多个 EditText

android:inputType="numberSigned|numberDecimal"

这在大多数情况下都有效,除了在尝试输入负数时,我必须先输入至少一个数字 (0~9),然后将光标移到前面以输入负号。我知道“-”不是有效的“带符号的十进制数”,但强制用户为每个负数字段移动光标会适得其反。

有没有办法让 numberSigned 允许先输入负号,或者我是否必须实现自定义 InputFilter 来复制大多数 "numberSigned|numberDecimal" 行为,除了允许输入负号先签名?

我已经用 Android 8.1 模拟器和 Android 9 Motorola e6 进行了测试,以防万一。

编辑

标题错误地假定默认情况下“numberSigned”不允许先输入负号。这是我在为这些 EditText 创建 InputFilter 时引入的错误 – 我不小心拒绝了“-”作为有效条目。

简单的解决方案是使用 digits 关键字。

<EditText 
  android:id="@+id/editText"
  android:digits="0,1,2,3,4,5,6,7,8,9,-,."
/>

更难的解决方案是实施 InputFilterTextWatcher,并使它们在字符为“-”时“覆盖”inputType 行为以评估没有进一步的工作是需要。