如何实现Android4.1语音输入的纠错和一键删除效果

这几天刚还在研究这个东东,简单写几句。

主要使用两个Span即可实现:SuggestionSpan 和 EasyEditSpan

部分实现代码如下,

1.关于SuggestionSpan的

                //不能共用Span,否则只有最后一个生效/////////非常重要
                SuggestionSpan ss1 = new SuggestionSpan(this, new String[]{"123", "456", "789"},SuggestionSpan.FLAG_AUTO_CORRECTION);
                ss1.setFlags(SuggestionSpan.FLAG_AUTO_CORRECTION);//蓝色 ///////////
                SuggestionSpan ss2 = new SuggestionSpan(this, new String[]{"hello", "hi", "bye"},SuggestionSpan.FLAG_AUTO_CORRECTION);
                ss2.setFlags(SuggestionSpan.FLAG_EASY_CORRECT);//灰色
                SuggestionSpan ss3 = new SuggestionSpan(this, new String[]{"你好", "再见", "谢谢"},SuggestionSpan.FLAG_AUTO_CORRECTION);
                ss3.setFlags(SuggestionSpan.FLAG_MISSPELLED);//无色
                 
                SpannableString str = new SpannableString("我们是一家人 对不对 是不是");
                
                str.setSpan(ss1, 0, 6, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);//只有最后一个生效
                str.setSpan(ss2, 7, 10, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);
                str.setSpan(ss3, 11, 14, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);
                
                ic.commitText(str, 1);

 2.关于EasyEditSpan的

                SpannableString spanText = new SpannableString("我们是一家人");
                spanText.setSpan(new EasyEditSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
                ic.commitText(spanText, 1);


注意:所有需要发送到输入框的Span必须实现了ParcelableSpan,没有实现这个接口的Span之能用于TextView中。

 

你可能感兴趣的:(android)