在Android中软键盘上只显示数字按钮?

40

在Android的软键盘中,您可以使用android:inputType="numberDecimal"将软键盘设置为显示数字而不是a-z键盘。但是,如果我只想显示顶部数字行1 2 3 4 5 6 7 8 9 0,而不是以下以@ # $ % ...开头的行,该怎么办呢?

谢谢您的倾听!


你可以在下面的问题中看到我的答案:http://stackoverflow.com/questions/39593324/cannot-resolve-symbol-showsoftinput/39593871#39593871 - Android Help
@AndroidHelp 这个问题是六年前发布的,四年前已经解决了。今天我不再开发 Android 应用程序了。我已经转而使用 SharePoint 进行工作 :) - Benny Skogberg
这个问题还没有答案吗?就像安卓系统中的内置键盘一样? - Prashanth VG
根据用户使用的第三方键盘应用程序,软键盘的使用取决于它。您只能告诉软键盘您要使用的数据类型,使用android:inputType。 - alacoo
9个回答

67
android:inputType="phone"
android:digits="1234567890"

是一个选项


软键盘上的下一个按钮会消失。 - string.Empty

43

您只需在代码中添加此行:

input.setRawInputType(Configuration.KEYBOARD_12KEY);

这将仅显示数字键盘。


不错!当问题被提出时 - 这还没有可用。然而,这是你今天应该做的事情。谢谢! - Benny Skogberg

11

我找到的最接近的东西是电话号码键盘(在你的EditText上设置inputType="phone")。


9

接受的答案对我没有用(在OnePlus 3t和三星Galaxy S6 / S7手机上进行了测试)。

这个解决方案使用numberPassword,但覆盖了EditText的默认转换方法,以显示字符而不是显示点。

<EditText
    android:id="@+id/userid"
    android:inputType="numberPassword"
    android:maxLength="6"
/>

// Numeric 6 character user id
EditText input = findViewById(R.id.userid);

// Process input and show characters instead of dots
input.setTransformationMethod(SingleLineTransformationMethod.getInstance());

3

我刚在这里回答了一个问题,但为了简单起见,再次发布:

似乎Android已经添加了我们所需的功能。这是我用于简单的EditText数字输入的xml:

    android:inputType="numberPassword"
    android:digits="0123456789"
    android:singleLine="true"
    android:ems="4"
    android:textColor="@android:color/black"
    android:gravity="center"

1
这会将文本变成密码形式,隐藏之前输入的数字。 - Elliot Blackburn
确实如此。我不知道为什么G不提供只显示10键而不显示其他字符的选项,但对于某些开发人员来说,这可能是生成简化键盘的好方法。当然,如果人们不介意一些多余的字符,"number"的inputType就可以解决问题。对于没有密码样式可见性的10键,自定义键盘是解决方案。 - TopherC

2

我尝试了被接受的答案,但它并没有起作用。它一直显示其他不想要的字符

我找到了一个实现我想要行为的方法,通过将输入类型更改为numberPassword,然后禁用密码点。

textInput.inputType = InputType.TYPE_CLASS_NUMBER or InputType.TYPE_NUMBER_VARIATION_PASSWORD
textInput.transformationMethod = SingleLineTransformationMethod()

1
最后我看了一下,Android 没有任何好的选择。结果我不得不编写自己版本的软键盘类似的用户界面。

所以为了兼容市场上最低版本(1.5),我需要编写自己的SoftKeyboard.java类。这将是一个挑战 :-) - Benny Skogberg
请问你能告诉我你是怎么做到的吗?因为我也需要完全相同的东西。 - keinabel

0

我已经在Xamarin中为Android实现了这个功能,所以我的代码是用C#编写的。但是原则保持不变。您可以将edittext的属性设置为android:inputType =“numberPassword”

然后,在您的代码中,您可以将自定义转换方法附加到您的edittext视图上。

holder.edtxtQty.TransformationMethod = new HiddenPasswordTransformationMethod();

private class HiddenPasswordTransformationMethod : global::Android.Text.Method.PasswordTransformationMethod
        {
            public override Java.Lang.ICharSequence GetTransformationFormatted(Java.Lang.ICharSequence source, View view)
            {
                return new PasswordCharSequence(source);
            }
        }

    private class PasswordCharSequence : Java.Lang.Object, Java.Lang.ICharSequence
    {
        private char DOT = '\u2022';

        private Java.Lang.ICharSequence _source;
        public PasswordCharSequence(Java.Lang.ICharSequence source)
        {
            _source = source;
        }

        public char CharAt(int index)
        {
            return _source.CharAt(index);
        }

        public int Length()
        {
            return _source.Length();
        }

        public Java.Lang.ICharSequence SubSequenceFormatted(int start, int end)
        {
            return _source.SubSequenceFormatted(start, end); // Return default
        }

        public IEnumerator<char> GetEnumerator()
        {
            return _source.GetEnumerator();
        }

        System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
        {
            return _source.GetEnumerator();
        }
    }

0

从代码:

et.setInputType(InputType.TYPE_CLASS_NUMBER)

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