26

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

我曾尝试使用android:inputType="numberDecimal|phone",但numberDecimal位标志的方面似乎被忽略了。我也尝试过android:inputType="phone"与 结合使用android:digits="0123456789-.",但它仍然允许多个负号或小数点(inputType="number"对类似的东西有很好的错误检查,甚至不会让用户输入)。我也尝试android:inputType="phone"在 xml 布局文件中使用,同时DigitsKeyListener在 java 代码中使用 a ,但随后只使用默认数字软键盘(仅在顶行有数字的那个)(它似乎是 set InputType.TYPE_CLASS_NUMBER,这会使InputType.TYPE_CLASS_PHONEset无效通过 xml 布局)。

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

有什么方法可以使用“电话”式软键盘,同时对输入的内容使用“数字”限制?

4

6 回答 6

29

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

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

希望这对您有所帮助。

于 2011-11-29T04:11:17.153 回答
10

到目前为止,我决定做的是扩展 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() 的返回切换到超类不打算的东西)?

于 2010-05-14T20:47:37.917 回答
3

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));
于 2014-02-27T18:33:13.377 回答
1
android:inputType="phone"
android:digits="0123456789."

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

于 2021-03-19T02:42:52.233 回答
0

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

于 2010-05-14T07:19:06.850 回答
0

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

于 2010-06-23T20:20:18.380 回答