您如何将 EditText 键盘设置为仅包含 Android 上的数字?

Posted

技术标签:

【中文标题】您如何将 EditText 键盘设置为仅包含 Android 上的数字?【英文标题】:How do you set the EditText keyboard to only consist of numbers on Android? 【发布时间】:2012-11-28 20:16:05 【问题描述】:

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

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

android: inputType = "numberPassword"

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

我试过了:

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

android:inputType="number"

但它看起来像这样:

【问题讨论】:

检查***.com/a/8122968/1777090 看看***.com/a/54866377/7756492 @ucMedia 你在下面有正确的答案。 【参考方案1】:

经过几次尝试,我明白了! 我像这样以编程方式设置键盘值:

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

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

【讨论】:

2年后我得到了正确答案,恭喜:) 这是我发现的唯一可行的解​​决方案。谢谢! 惊人的答案! 有效,但改变了字体样式,在 Nexus 5X、Android 7.1.1 上测试。 当键盘处于全屏模式时,它仍然显示项目符号。无论我将什么传递给setTransformationMethod 方法。【参考方案2】:

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

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

【讨论】:

不起作用,出现字符:“.” “-”,“”,我想要一个像键盘一样的图像。 我认为只有创建自己的软键盘才有可能。或者试试这个 android:inputType="number|textVisiblePassword。但它仍然显示其他字符。此外,您可以保留 android:digits="0123456789" 以在您的编辑文本中只允许数字。或者如果您仍然想要与图像相同,请尝试将两个或多个功能与 | 分隔符结合起来并检查你的运气,但据我所知,你必须创建自己的键盘才能完全一样.. @perfectionming 好吧,实际上您也可以像这样在 java 代码中以编程方式将此功能设置为编辑文本 --> editText.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_VARIATION_NORMAL);或您想要的任何输入类型,您只需借助常量即可。有关更多恒定值,请参阅我的答案中的上述链接。如果有帮助,请不要忘记支持我的答案;)或者您甚至可以通过自定义对话框的 xml 代码扩展布局,然后在 xml 代码本身中设置这些输入功能.. @perfectionming 我认为它不会显示要输入的字母,因为它纯粹基于 api。让我检查并返回,否则您可以向我展示您当前场景的图像或代码。【参考方案3】:
<EditText
        android:id="@+id/editText3"
        android:layout_
        android:layout_
        android:layout_weight="1"
        android:ems="10"
        android:inputType="number" />

我已经尝试了所有东西,现在试试这个 它显示其他字符,但您无法在editText中输入

edit.setRawInputType(Configuration.KEYBOARD_12KEY);

【讨论】:

感谢您的帮助,但不要解决我的问题。我已经尝试过这种方式。我需要数字键盘。你的例子展示了另一个人的性格。我正在尝试一切,但这并不容易。 :( 显然与问题无关,但你从哪里得到这个主题?【参考方案4】:

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

  android:inputType="number"

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

【讨论】:

谢谢,但不起作用,出现字符:“。” "-" "" 请看问题中的图片。 是的,Jorge 等一下,我正在尝试制作一个只显示数字而不显示任何特殊字符的键盘 为什么不在程序中检查用户是否输入数字或特殊字符的验证,如果他输入数字而不是继续,否则不会 因为我正在做的应用程序的规范仅使用键盘数字,没有其他字符。如果不是规范,我已经解决了这个问题......我一直在尝试并在谷歌和这里寻找...... :( 我正在努力,如果我成功了,我会告诉你的【参考方案5】:

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

如果您想显示同时显示字符的数字键盘,请将android:inputType="phone" 放在您的 XML 中。输出(带字符):

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

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

【讨论】:

嗨!欢迎来到 SO。请参阅correct answer。 OP 特别想排除,*#,但这个答案包括那些字符。【参考方案6】:

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

yourEditText.keyListener = DigitsKeyListener.getInstance("0123456789")

【讨论】:

【参考方案7】:

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

XML

android:inputType="numberPassword"

代码

textField.transformationMethod = null

【讨论】:

不工作 - 至少在 api 31 上仍然接受逗号、点等(取决于本地化和键盘) @FedirTsapana 我非常怀疑这一点。我已经在最新的 API 以及各种设备和 API 上测试了这种方法。它只允许输入 0-9。此外,它还显示 DELETE 键和 ENTER 键。【参考方案8】:

如果你使用 Kotlin

XML

android:inputType="numberPassword"

代码

editText.transformationMethod = null

结果

【讨论】:

【参考方案9】:

Koltin 解决方案:

我在 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("\\pSo+".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 中的字符 适用于所有安卓版本 它将解决使用过滤器重复文本的问题

【讨论】:

【参考方案10】:

将以下几行放入您的&lt;EditText&gt;

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

【讨论】:

OP 特别想排除 ,*# 但这个答案包括这些字符。【参考方案11】:

如果我们指定EditText,

android:inputType="number"

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

android:inputType="phone"

除了数字之外,它还可以接受特殊字符,例如 ;,/". 等

【讨论】:

OP 特别想排除 ,*# 但这个答案包括这些字符。【参考方案12】:

在xml中edittext:

android:id="@+id/text"

在程序中:

EditText text=(EditText) findViewById(R.id.text);
text.setRawInputType(Configuration.KEYBOARDHIDDEN_YES);

【讨论】:

OP 不想隐藏键盘。

以上是关于您如何将 EditText 键盘设置为仅包含 Android 上的数字?的主要内容,如果未能解决你的问题,请参考以下文章

Android EditText软键盘问题

Android view显示在软键盘上方

如何为特定活动禁用 Android 软键盘?

如何为特定活动禁用Android Soft Keyboard?

如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?

如何将 datetimepicker 下拉菜单设置为仅显示月份