是否可以在Android EditText中停用“双击一段时间”?

时间:2016-07-05 06:42:41

标签: android android-edittext

它一直搞乱了我的编辑文本过滤器。当我双击空格时,将删除前一个字符。这是我的过滤器:

@Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (!isValid(source)) { // This simple calls Matcher.matches
            return "";
        }

        return null;
    }

当我双击空格键时,使用以下来源调用过滤器三次:

  1. 来源与空间来源(“”)
  2. 空源(“”)(类似于退格) - >这个删除最后一个字符
  3. “。”来源
  4. 我试着保留最后一个字符:

    if(source.toString().isEmpty()) {
                return ((Character) dest.toString().charAt(dest.toString().length()-1)).toString();
            }
    

    它解决了这个问题,但由于这种解决方法,我不能再做退格。有没有办法只为这个单一的EditText禁用“双击时间段”功能?我注意到Google Chrome应用中的地址栏似乎禁用了此功能,只是将双击空间视为两个空格。

2 个答案:

答案 0 :(得分:2)

就我而言,我的输入只是一个单行字段。我只需将inputType设置为textVisiblePassword:

android:inputType="textVisiblePassword"

这也处理我的规范以禁用建议/字典。但是,我想看看是否有其他方法可以做到这一点,因为其他人可能需要建议/字典,只是想禁用双击期间功能。欢迎提供其他答案。

答案 1 :(得分:0)

主要的黑客攻击,但是如果您的输入过滤器中不允许使用空格或句点,则此方法有效: - )

        private char prevLastChar;

    @Override
    public CharSequence filter(CharSequence source, int start, int end,
                               Spanned dest, int dstart, int dend) {

        boolean isAutoPeriod = StringUtils.eq(source.toString(), ". ");
        if (!isAutoPeriod && (dstart == dend) && (dend == dest.length()) && (dest.length() > 0)) {
            prevLastChar = dest.charAt(dest.length()-1);
        }
        if (isAutoPeriod && (dstart == dend) && (dend == dest.length())) {
            if (source instanceof SpannableStringBuilder) {
                return SpannableStringBuilder.valueOf(Character.toString(prevLastChar));
            } else {
                return Character.toString(prevLastChar);
            }
        }

然后为输入过滤器的其余部分添加任何内容。

我们确实应该有一个禁用autoPunctuation的inputType: - (