Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中仅在软键盘上显示数字按钮?_Android_Android Softkeyboard - Fatal编程技术网

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

在Android中仅在软键盘上显示数字按钮?,android,android-softkeyboard,Android,Android Softkeyboard,在Android的软键盘上,您可以使用Android:inputType=“numberDecimal”将软键盘设置为显示数字,而不是a-z键盘。但是,如果我只想显示最上面的数字行1234567890,而不想显示以下以@#$%开头的行…,该怎么办 谢谢你的倾听 上次我调查时,安卓没有任何好的选择。最后,我不得不编写自己版本的类似软键盘的用户界面。电话号码板是我找到的最接近的东西(在您的编辑文本上设置inputType=“phone”) 是一个选项您只能在代码中添加此行: input.setRaw

在Android的软键盘上,您可以使用
Android:inputType=“numberDecimal”
将软键盘设置为显示数字,而不是a-z键盘。但是,如果我只想显示最上面的数字行
1234567890
,而不想显示以下以
@#$%开头的行…
,该怎么办


谢谢你的倾听

上次我调查时,安卓没有任何好的选择。最后,我不得不编写自己版本的类似软键盘的用户界面。

电话号码板是我找到的最接近的东西(在您的
编辑文本上设置
inputType=“phone”


是一个选项

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

input.setRawInputType(Configuration.KEYBOARD_12KEY);
这将只显示数字键盘。

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

Android似乎增加了我们所寻求的功能。这是我用于简单EditText数字输入的xml:

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

我在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();
        }
    }
holder.edtxtQty.TransformationMethod=新的HiddenPasswordTransformationMethod();
私有类HiddenPosswordTransformationMethod:global::Android.Text.Method.PasswordTransformationMethod
{
public override Java.Lang.ICharSequence GetTransformationFormatted(Java.Lang.ICharSequence源代码,视图)
{
返回新的PasswordCharSequence(源);
}
}
私有类PasswordCharSequence:Java.Lang.Object、Java.Lang.ICharSequence
{
私有字符点='\u2022';
私有Java.Lang.ICharSequence\u源代码;
公共密码CharSequence(Java.Lang.ICharSequence源代码)
{
_来源=来源;
}
公共字符(整型索引)
{
返回源字符(索引);
}
公共整数长度()
{
返回_source.Length();
}
public Java.Lang.ICharSequence子序列已格式化(int start,int end)
{
return _source.SubSequenceFormatted(start,end);//返回默认值
}
公共IEnumerator GetEnumerator()
{
返回_source.GetEnumerator();
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
返回_source.GetEnumerator();
}
}

被接受的答案对我不起作用。它不断显示其他不需要的字符

我找到了一种实现我想要的行为的方法,将inputType更改为
numberPassword
,然后禁用密码

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

被接受的答案对我不起作用(在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());

//数字6字符用户id
EditText输入=findViewById(R.id.userid);
//处理输入并显示字符而不是点
setTransformationMethod(SingleLineTransformationMethod.getInstance());
来自代码:

et.setInputType(InputType.TYPE_CLASS_NUMBER)

因此,为了获得目前市场上使用的最低版本(1.5),我需要编写自己的SoftKeyboard.java类。那将是一个挑战:-)你能告诉我你是怎么做到的吗?因为我也需要这个。谢谢!我试试看。布莱尼斯!当被问到这个问题时,这是不可用的。然而,这是你今天应该做的。塔克斯!软键盘上的“下一步”按钮不再使用此按钮。这会使文本变成密码,隐藏以前输入的数字。确实如此。我不知道为什么G不提供10键,而不显示其他字符,但是对于一些开发人员来说,这是一种制作精简键盘的好方法。当然,如果人们不介意一些无关的字符,输入“number”就可以了。对于没有密码样式可见性的10键,自定义键盘是解决方案。您可以在下面的问题@AndroidHelp上看到我的答案。该问题是六年前发布的,四年前解决的。今天我不为Android开发应用程序。我已经开始使用SharePoint:)还没有答案吗?像安卓内置的键盘吗?这取决于用户使用的第三方键盘应用程序。你只能告诉软键你想用安卓输入什么类型的数据:inputType
et.setInputType(InputType.TYPE_CLASS_NUMBER)