74

我希望我EditText显示一个只有数字可见的键盘,没有其他字符。

我已经用所有可用的输入进行了测试,但它不起作用。我寻找一种方法来获得只有数字的键盘,但我只看到了以下参考:

android: inputType = "numberPassword"

但我希望数字可见,如下所示:(numberPassword)

在此处输入图像描述

我尝试过:

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

android:inputType="number"

但它看起来像这样:

在此处输入图像描述

4

12 回答 12

129

经过几次尝试,我明白了!我正在以编程方式设置键盘值,如下所示:

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());

这就是我的键盘现在的样子:

于 2015-05-26T19:02:55.133 回答
23

android:inputType="number"android:inputType="phone"。你可以保留这个。您将获得包含数字的键盘。有关不同类型键盘的更多详细信息,请查看此链接

我认为只有创建自己的软键盘才有可能。或者试试这个android:inputType="number|textVisiblePassword。但它仍然显示其他字符。此外,您可以保留android:digits="0123456789"在您的edittext. 或者,如果您仍然想要与图片中的相同,请尝试将两个或更多功能与 | 分隔符并检查您的运气,但据我所知,您必须创建自己的键盘才能完全一样..

于 2012-12-11T09:50:05.233 回答
9
<EditText
        android:id="@+id/editText3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:ems="10"
        android:inputType="number" />

我已经尝试了所有的东西现在试试这个它显示其他字符但你不能在editText中输入

edit.setRawInputType(Configuration.KEYBOARD_12KEY);

在此处输入图像描述

于 2012-12-11T09:51:30.240 回答
3

我认为您以某种方式使用了正确的方法来仅在键盘上显示数字,因此最好在编辑文本中尝试使用 xml 的给定行,它会完美运行,所以这里的代码是 -

  android:inputType="number"

如有任何疑问,您可以再次问我,我会尽力彻底解决您的问题。谢谢

于 2012-12-11T09:51:47.267 回答
3

如果您只想显示不带字符的数字,请将这行代码放入您的 XML 文件android:inputType="number"中。输出:

在此处输入图像描述

如果您想显示一个也显示字符的数字键盘, android:inputType="phone"请使用您的 XML。输出(带字符):

有字符

如果你想显示一个数字键盘,就像密码一样屏蔽你的输入,把android:inputType="numberPassword". 输出:

在此处输入图像描述

如果我只发布截图的链接,我真的很抱歉,我想研究如何在这里真正发布图片,但它可能会占用我的时间,所以就在这里。我希望我的帖子可以帮助其他人。是的,我的答案与此处发布的其他答案重复,但为了节省其他人在看到输出之前可能需要运行代码的时间,我的帖子可能会为您节省一些时间。

于 2019-10-23T08:57:17.013 回答
3

如果你使用Kotlin

XML

android:inputType="numberPassword"

代码

editText.transformationMethod = null

结果

在此处输入图像描述

于 2021-12-01T18:07:44.970 回答
2

完全不需要实施新的转换方法。仅此一项就可以很好地解决它:

XML

android:inputType="numberPassword"

代码

textField.transformationMethod = null
于 2021-07-07T16:16:22.090 回答
0

有点晚了,但它可能会帮助其他人。您可以为您的 EditText 设置 keylistener 并仅将要侦听的键传递给它:

yourEditText.keyListener = DigitsKeyListener.getInstance("0123456789")
于 2021-07-05T06:50:24.590 回答
0

科尔廷解决方案:

我在 Koltin 做了一个扩展来实现这一点。即使使用过滤器,我也尝试了很多方法,但有一些错误,Filter比如在输入时重复相同的文本。

fun EditText.onAfterTextChanged(allowedChars: String, listener: (String) -> Unit) {
    addTextChangedListener(object : TextWatcher {
        override fun afterTextChanged(editable: Editable?) {
            val input = editable.toString()
            val newValue = replaceInvalidCharacters(input, allowedChars)
            if (newValue != input) {
                setText(newValue)
                setSelection(text.length)
            }
            listener(newValue)
        }

        override fun beforeTextChanged(s: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }

        override fun onTextChanged(s: CharSequence?, p1: Int, p2: Int, p3: Int) {
        }
    })
}

fun replaceInvalidCharacters(value: String, allowedChars: String): String {
    var finalValue = value.replace("\\p{So}+".toRegex(), "") // To remove emojis when copy paste
    if (finalValue.isNotEmpty()) {
        val lastChar = finalValue.last()
        if (!allowedChars.contains(lastChar, false)) {
            finalValue = finalValue.dropLast(1)
        }
    }
    return finalValue
}

您可以在 Activity 中使用它,如下所示:

editText.onAfterTextChanged(getString(R.string.supported_digits)) { // Here you can pass whatever the digits you want to allow
            val length = it.length
            if (length > 250) { // You can also check how much length to allow
                return@onAfterTextChanged
            }
        }
  • 您可以将任何您想要允许的字符传递给它
  • 它会在输入时过滤表情符号
  • 即使您复制粘贴它也会删除表情符号
  • 它将只允许出现在 allowedChars 中的字符
  • 它适用于所有安卓版本
  • 它将解决使用过滤器重复文本的问题
于 2021-12-15T07:02:30.037 回答
-1

将以下行放在您的<EditText>:

android:digits="0123456789"
android:inputType="phone"
于 2012-12-11T09:51:06.047 回答
-3

如果我们指定 EditText,

android:inputType="number"

只能得到数字。但如果你使用,

android:inputType="phone"

连同数字,它可以接受特殊字符,如 ;,/". 等。

于 2013-12-09T12:11:25.327 回答
-3

在 xml 中edittext

android:id="@+id/text"

在程序中:

EditText text=(EditText) findViewById(R.id.text);
text.setRawInputType(Configuration.KEYBOARDHIDDEN_YES);
于 2014-03-26T09:37:37.380 回答