Android TextWatcher onTextChanged无法使用软键盘自动完成/建议的单词

Android TextWatcher onTextChanged无法使用软键盘自动完成/建议的单词,android,android-edittext,android-softkeyboard,textwatcher,android-textwatcher,Android,Android Edittext,Android Softkeyboard,Textwatcher,Android Textwatcher,我在EditText上实现了一个TextWatcher,每当用户输入一个新字符时,它都会在文本中查找一系列关键字并为这些关键字加下划线。但是,当选择软键盘上的建议/自动完成单词时,将删除半完整单词,而不是将建议单词添加到Edittext,然后调用ContextChanged函数。我发现这相当奇怪,因为输入单个字符可以很好地激活onTextChanged函数。任何帮助都将不胜感激 如果有人知道一个更好的方式来处理编辑文本的飞行,请让我知道 代码: @覆盖 创建时受保护的void(Bundle sa

我在EditText上实现了一个TextWatcher,每当用户输入一个新字符时,它都会在文本中查找一系列关键字并为这些关键字加下划线。但是,当选择软键盘上的建议/自动完成单词时,将删除半完整单词,而不是将建议单词添加到Edittext,然后调用ContextChanged函数。我发现这相当奇怪,因为输入单个字符可以很好地激活onTextChanged函数。任何帮助都将不胜感激

如果有人知道一个更好的方式来处理编辑文本的飞行,请让我知道

代码:

@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u codify\u test);
最终编辑文本编辑文本=(编辑文本)findViewById(R.id.EditText\u编码测试);
editText.addTextChangedListener(新的TextWatcher(){
@凌驾
更改前文本之前的公共void(字符序列s、int start、int count、int after){
}
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
如果(!选中){//停止无限循环
选中=正确;
cursorPosition=editText.getSelectionStart();//在修改文本之前获取光标位置
编纂文本(编辑文本);
}否则{
选中=错误;
}
}
@凌驾
公共无效后文本已更改(可编辑){
}
});
}
//查找并在关键字下面划线
私有void codifyText(EditText EditText){
字符串纯文本=editText.getText().toString()+“”;
int-prevWhiteSpace=0;
最终上下文=此;
SpannableString codedtext=新的SpannableString(明文.substring(0,明文.length()-1));
if(codifiedText.length()==0)返回;
for(int i=0;i
最好采用后文本更改的方法。
在下面的示例中,将使用处理程序检索和处理输入的文本,以便进一步处理

    EditText text1;
    StringBuffer previousChar=new StringBuffer();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    setContentView(R.layout.activity_main);
    text1=(EditText)findViewById(R.id.editText);
    text1.addTextChangedListener(new TextWatcher() {
                @Override
                public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                }
                @Override
                public void onTextChanged(CharSequence s, int start, int before, int count) {
                }
                @Override
                public void afterTextChanged(Editable s) {
                    if(!previousChar.toString().equals(s.toString())){
                        Message msg=new Message();
                        msg.obj=s.toString();
                        localHandler.sendMessage(msg);
                        previousChar=new StringBuffer(s.toString());
                        Log.i("TAG", "TextEntered = "+s);
                    }
                }
            });}
并且在处理程序中

private Handler localHandler = new Handler(){
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String value=(String)msg.obj;
            //Your logic with the text entered that is retrieved 
        }
    };
private Handler localHandler = new Handler(){
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            String value=(String)msg.obj;
            //Your logic with the text entered that is retrieved 
        }
    };