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

时间:2010-07-28 20:39:39

标签: android android-softkeyboard

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

Thanx倾听!

9 个答案:

答案 0 :(得分:63)

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

是一个选项

答案 1 :(得分:40)

您只能在代码中添加以下行:

input.setRawInputType(Configuration.KEYBOARD_12KEY);

这将显示数字键盘。

答案 2 :(得分:10)

电话号码簿是我找到的最接近的内容(在inputType="phone"上设置EditText)。

答案 3 :(得分:3)

接受的答案对我不起作用(在OnePlus 3t和Samsung 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());

答案 4 :(得分:1)

最后我调查了一下,Android没有任何好的选择。我最终不得不编写自己的软键盘式用户界面版本。

答案 5 :(得分:1)

刚刚发布了答案here,但为了简单起见重新发帖:

似乎Android已经添加了我们正在寻找的功能。这是我用于简单EditText数字条目的xml:

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

答案 6 :(得分: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();
        }
    }

答案 7 :(得分:0)

接受的答案对我没有用。它一直显示其他不需要的字符

我找到了一种方法来完成我想要的行为,方法是将inputType更改为numberPassword,然后禁用密码点

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

答案 8 :(得分:0)

来自代码:

et.setInputType(InputType.TYPE_CLASS_NUMBER)