【问题标题】:Android EditText - Input with numbers onlyAndroid EditText - 仅输入数字
【发布时间】:2021-05-14 01:04:19
【问题描述】:

我创建了一个只允许数字作为输入的 EditText。这是一个非常简单的 EditText,没有什么特别之处:

<EditText
        android:id="@+id/editTextAmount"
        android:layout_marginTop="10dp"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:background="@color/colorWhite"
        android:inputType="text"
        android:digits="0123456789"
        />

我在一些设备上进行了尝试,它按预期工作,我只能输入数字。使用三星 Galaxy Note S10+ 时会出现问题(使用三星键盘,我认为问题来自那里)。使用该设备,当我关注 EditText 时,键盘会打开(只有数字可见),但是当我在字段中键入内容时,什么也没有发生。我可以按键盘上的任何键(输入键、数字……)没有任何变化。

我试图在活动中以编程方式更改输入类型,我试图摆弄 inputType (numberDecimal, numberSigned, both, ...) 在任何情况下它根本不起作用。有趣的是,如果我将 inputType 更改为“text”并删除数字限制,那么它就可以正常工作了。

我的问题是:如何使用三星 Galaxy Note S10+ 将 EditText 输入限制为数字?

编辑:为了清楚起见,我要求这是针对特定设备的!我已经试过了:

android:inputType="number"

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

并且 这些的任何变体(numberDecimal、numberSigned、...)

【问题讨论】:

  • 你说这个问题只发生在特定设备上很有趣,所以我想这不是重复的,人们在阅读问题时应该考虑一下
  • @a_local_nobody 事实上,有成千上万的帖子问这个问题。我是一位经验丰富的 Android 开发人员,并且已经完成了一百万次。我的问题确实是针对此设备(和/或其他三星设备?)。

标签: android android-edittext keyboard


【解决方案1】:

在Java类中这样设置输入类型

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

或者如果你想从布局中做到这一点,那么设置

android:inputType="number"

【讨论】:

    【解决方案2】:
    myEditText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_PASSWORD);
    

    或者,如果您愿意,您可以像这样编辑 XML:

    android: inputType = "numberPassword"
    

    两个配置都会显示密码项目符号,所以我们需要创建一个自定义 ClickableSpan 类:

    private class NumericKeyBoardTransformationMethod extends PasswordTransformationMethod {
        @Override
        public CharSequence getTransformation(CharSequence source, View view) {
            return source;
        }
    }
    

    最后我们需要在 EditText 上实现它,以便显示输入的字符。

    myEditText.setTransformationMethod(new NumericKeyBoardTransformationMethod());
    

    【讨论】:

      【解决方案3】:

      这个配置似乎很好用:

      android:digits="0123456789"
      android:inputType="phone"
      

      这对我来说是一个足够好的解决方法。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 2020-07-16
        • 2013-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-19
        相关资源
        最近更新 更多