【问题标题】:Set EditText Digits Programmatically以编程方式设置 EditText 数字
【发布时间】:2011-11-10 03:48:27
【问题描述】:

我实际上是在尝试以编程方式设置 EditText 的数字值。到目前为止,我有:

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

这很好,但我也希望能够包含小数位 (.)。有什么想法吗?

【问题讨论】:

  • 您可能更喜欢使用DialerKeyListener 而不是DigitsKeyListener

标签: android android-edittext


【解决方案1】:

试试这个:

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

来自代码:

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

但是,它允许用户包含多个“。” 请参阅JoeyRA 对实数的回答。

【讨论】:

  • 很好,但我想以编程方式执行此操作。这样做的原因是因为我想在多种情况下重用一个布局,因为这个数字是唯一不断变化的变量。在我的情况下,在代码中执行此操作更有效。
  • 谢谢。我实际上觉得这个答案值得勾选,因为它特定于我的要求,但两种解决方案都有效。
  • @feresr,这很奇怪,因为查看TextView 来源:// If no input type was specified, we will default to generic text, since we can't tell the IME about the set of digits that was selected.
  • 9后.有什么用?
  • @MiteshShah 它允许小数位。
【解决方案2】:

试试这个:

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.setKeyListener(DigitsKeyListener.getInstance(true,true));启用小数和负数。 editText.setKeyListener(DigitsKeyListener.getInstance(false,true));仅启用正小数。 editText.setKeyListener(DigitsKeyListener.getInstance(false,false));仅启用正整数。
  • 问题:如果你一次又一次地setInputType,它不会将第二个覆盖到第一个吗?我认为你应该使用weightInput.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);,但我不是 100% 确定
  • @RafaelRuizMuñoz 当然会覆盖
  • 这个解决方案仍然允许在你开始输入数字之前输入点
【解决方案3】:

使用InputType.TYPE_NUMBER_FLAG_DECIMAL

另见:Input Types

【讨论】:

  • -1?我肯定没有那样做。您的解决方案有效,谢谢。
  • 好像已经恢复了。很高兴能提供帮助。
【解决方案4】:

如果有人仍然找到正确的方法,请注意它的 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)

【讨论】:

    【解决方案5】:

    用于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" />
    

    【讨论】:

    • 请注意,十六进制IP地址(以0x开头的部分)也是有效的,并且可以使用域名代替IP地址。
    猜你喜欢
    • 1970-01-01
    • 2016-11-10
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2014-03-14
    相关资源
    最近更新 更多