以编程方式设置EditText输入的数字

96

我想要通过编程的方式设置EditText的数字值。目前我已经做了以下尝试:

weightInput.setInputType(InputType.TYPE_CLASS_PHONE);
weightInput.setKeyListener(DigitsKeyListener.getInstance());

这很好,但我也想能够包括一个小数点(.)。有什么想法吗?


1
你可能更喜欢使用 DialerKeyListener 而不是 DigitsKeyListener - Dmitry Gryazin
6个回答

227

试试这个:

<EditText
    android:inputType="number"
    android:digits="0123456789."
/>

从代码中:

weightInput.setKeyListener(DigitsKeyListener.getInstance("0123456789."));

然而,它允许用户包含多个“.”

请参考JoeyRA的答案获取实数。


这样做也可以,但我想以编程的方式来实现。原因是我想在多种情况下重复使用一个布局,而这些数字是唯一经常变化的变量。在我的情况下,用代码实现更加有效。 - ryandlf
2
谢谢。我认为这个答案值得被标记,因为它是针对我所问的问题具体的,但两个解决方案都可以运行。 - ryandlf
@feresr,这很奇怪,因为查看TextView源代码:// 如果没有指定输入类型,我们将默认为通用文本,因为我们无法告诉 IME 所选数字集合。 - Dmitry Gryazin
setKeyListener将限制软件键盘上仅使用数字(而非字母)。在模拟器的硬件键盘上可以正常工作。 - CoolMind
1
@MiteshShah 它允许使用小数点。 - masterwok
显示剩余2条评论

34

试一下:

weightInput.setInputType(InputType.TYPE_NUMBER_FLAG_DECIMAL);           
weightInput.setKeyListener(DigitsKeyListener.getInstance(false,true));

public static DigitsKeyListener getInstance (boolean sign, boolean decimal) 
返回接受数字0到9的DigitsKeyListener,加上减号(仅在开头)和/或小数点(每个字段仅限一个),如果指定了的话。 这解决了EditText中有许多“.” 的问题。

1
只需添加以下说明:editText.setKeyListener(DigitsKeyListener.getInstance(true,true)); 以启用小数和负数。editText.setKeyListener(DigitsKeyListener.getInstance(false,true)); 以仅启用正小数。editText.setKeyListener(DigitsKeyListener.getInstance(false,false)); 以仅启用正整数。 - SerSánGal
9
如果你多次调用setInputType方法,会不会覆盖第二个设置到第一个上面?我认为你应该使用weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);,但是我不确定100%。 - Rafael Ruiz Muñoz
@RafaelRuizMuñoz 当然会覆盖。 - user924
这个解决方案仍然允许在输入数字之前输入点。 - user924

21

使用InputType.TYPE_NUMBER_FLAG_DECIMAL

另请参阅:输入类型


-1?我肯定没有这样做。你的解决方案有效,谢谢你。 - ryandlf
似乎已经被还原了。很高兴能帮上忙。 - Ricky

13

如果还有人在寻找适当的方法,请注意它是 setRawInputType() 而不是 setInputType()

val digits = "ABCDabcd" // or any characters you want to allow
editText.keyListener = DigitsKeyListener.getInstance(digits) 
editText.setRawInputType(InputType.TYPE_TEXT_VARIATION_PERSON_NAME)

4
对于IP地址输入(多个点和数字),请尝试:
<EditText
    android:id="@+id/ipBox"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/ipAddrHint"
    android:inputType="numberDecimal|number"
    android:digits="0123456789."
    android:textSize="30sp" />

1
请注意,十六进制的IP地址(以0x开头的部分)也是有效的,域名也可以用来代替IP地址。 - Triang3l

0

以上解决方案都没有按预期起作用。XML 文件中的数字仍允许我在输入中输入“,”。 请检查一下,这个方法对我很有效:

edittext.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接