首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何通过“电话”软键盘使用InputType=numberDecimal?

如何通过“电话”软键盘使用InputType=numberDecimal?
EN

Stack Overflow用户
提问于 2010-05-14 06:10:17
回答 6查看 38.2K关注 0票数 24

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

我尝试使用android:inputType="numberDecimal|phone",但是位标志的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作为应用程序之外的全局选项。

有没有办法使用“电话”风格的软键盘,同时对输入的内容使用“数字”限制?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-05-15 04:47:38

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

代码语言:javascript
运行
复制
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()的返回值切换为超类不想要的值)有什么错吗?

票数 10
EN

Stack Overflow用户

发布于 2011-11-29 12:11:17

我也有同样的问题。这对我来说很有效:

代码语言:javascript
运行
复制
<item name="android:inputType">numberDecimal</item>
<item name="android:digits">0123456789.</item>

希望这能对你有所帮助。

票数 28
EN

Stack Overflow用户

发布于 2014-02-28 02:33:13

Adam Dunn的代码运行完美,但是没有展示如何实现这个类

代码语言:javascript
运行
复制
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;
    }
}

然后你必须像这样举例

代码语言:javascript
运行
复制
MyTextView.setKeyListener(new CustomDigitsKeyListener(true,true));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2830664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档