如何在“手机”软键盘上使用InputType = numberDecimal?

时间:2010-05-13 22:10:17

标签: android numeric-keypad

对于EditText框,用户应该只输入有效数字,因此我使用android:inputType="numberDecimal"。不幸的是,Android提出的软键盘只有顶行的数字,而接下来的三行有各种其他符号(美元符号,百分号,感叹号,空格等)。由于numberDecimal只接受数字0-9,负号和小数点,因此使用“手机”软键盘(3x3网格中的0-9,加上其他一些符号)会更有意义。这将使按钮更大并且更容易被击中(因为它是4x4网格而不是同一屏幕区域中的10x4网格)。不幸的是,使用android:inputType="phone"允许使用非数字字符,例如括号

我试图使用android:inputType="numberDecimal|phone",但是bit标志的numberDecimal方面似乎被忽略了。我也尝试将android:inputType="phone"android:digits="0123456789-."结合使用,但仍允许多个负号或小数点(inputType="number"对此类事情进行了非常好的错误检查,并且不会让用户甚至键入它)。我也尝试在xml布局文件中使用android:inputType="phone",同时在java代码中使用DigitsKeyListener,但之后只使用默认数字软键盘(仅在顶行有数字的键盘) (它似乎设置InputType.TYPE_CLASS_NUMBER,这会使xml布局设置的InputType.TYPE_CLASS_PHONE无效。

编写自定义IME不起作用,因为用户必须选择IME作为应用程序之外的全局选项。

有没有办法使用“手机”式软键盘,同时对所输入的内容使用“数字”限制?

6 个答案:

答案 0 :(得分:20)

我遇到了同样的问题。这对我有用:

<item name="android:inputType">numberDecimal</item>
<item name="android:digits">0123456789.</item>

希望这可以帮到你。

答案 1 :(得分:8)

到目前为止,我决定扩展DigitsKeyListener并覆盖getInputType(),以便返回InputType.TYPE_CLASS_PHONE。这允许我在DigitsKeyListener中使用方便的filter(),但同时使用TYPE_CLASS_PHONE软键盘。我是Android编程的新手,但这似乎没有破坏任何东西。代码是这样的:

import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

这样做有什么不妥(将getInputType()的返回切换为超类不想要的东西)?

答案 2 :(得分:1)

您只需使用手机键盘并自行检查输入。测试输入是否为0到9之间的有效数字并不是一个很大的条件。

答案 3 :(得分:1)

Adam Dunn代码完美无缺,但没有展示如何实现类

import android.text.method.DigitsKeyListener;
import android.text.InputType;
public class CustomDigitsKeyListener extends DigitsKeyListener
{
    public CustomDigitsKeyListener() {
        super(false, false);
    }

    public CustomDigitsKeyListener(boolean sign, boolean decimal) {
        super(sign, decimal);
    }

    public int getInputType() {
        return InputType.TYPE_CLASS_PHONE;
    }
}

然后你必须像这样

MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));

答案 4 :(得分:1)

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

将此添加到您的 EditText xml 布局。
这将显示电话布局,但只允许用户点击指定的数字。
用户点击其他字符将被忽略。

答案 5 :(得分:0)

尝试在EditText视图中使用android:numeric="integer"