它一直搞乱了我的编辑文本过滤器。当我双击空格时,将删除前一个字符。这是我的过滤器:
@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;
}
当我双击空格键时,使用以下来源调用过滤器三次:
我试着保留最后一个字符:
if(source.toString().isEmpty()) {
return ((Character) dest.toString().charAt(dest.toString().length()-1)).toString();
}
它解决了这个问题,但由于这种解决方法,我不能再做退格。有没有办法只为这个单一的EditText禁用“双击时间段”功能?我注意到Google Chrome应用中的地址栏似乎禁用了此功能,只是将双击空间视为两个空格。
答案 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: - (