Android EditText过滤换行符,回车符和空白符,以及过滤表情

Android EditText过滤换行符,回车符和空白符,以及过滤表情

查看文章前请参考:Java 中 Emoji 的正则表达式

功能介绍

  1. 过滤换行符,回车符,空白符
  1. 过滤Emoji
1. 背景

项目有个需求,所有与“标题”有关的输入,都不允许有换行。
第一次拿到这个需求的时候觉得很简单,直接设置一个InputFilter

public class NewlineFilter implements InputFilter {

    /**
     * @param source 输入的文字
     * @param start  输入-0,删除-0
     * @param end    输入-文字的长度,删除-0
     * @param dest   原先显示的内容
     * @param dstart 输入-原光标位置,删除-光标删除结束位置
     * @param dend   输入-原光标位置,删除-光标删除开始位置
     * @return null表示原始输入,""表示不接受输入,其他字符串表示变化值
     */
    @Override
    public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
        if (source.toString().contains("\n")) {
            return source.toString().replace("\n", "");
        }
        return null;
    }
}

然后拿起手机测试,发现没毛病,开开心心的提测。。。

2. 问题

第二天打开jira一看,有个bug:

“魅蓝Note5输入字符的时候字符成倍出现,删除的时候还会输入字符”
我拿来测试机试了一下:

![](https://i.imgur.com/YFPXh4X.jpg)
魅族Note5
![](https://i.imgur.com/IRWXtIg.png)
华为手机

很明显,魅族的输入法会把当前“待输入字符”放入到EditText输入框里,而华为的讯飞输入法不会。
再回看上面的代码就会发现一个问题:
return source.toString().replace("\n", “”);会把当前魅族Note5输入框中的“待输入字符”转化为输入字符,但是,推荐词区域的字符并没有丢失,所以下次输入字符的时候会把推荐词内容一并倒入到输入框里,这就是测试同学说的现象。完美复现!

3. 方案

好,现在问题明了了,说白就是适配问题。

解决适配问题有个准则:

  • 1.尽量少些特有平台代码
  • 2.覆盖测试

所以我的思考方向是:看看官方怎么实现的

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值