目前,我需要在 EditText
中捕获最终出现的文本。
这是我的简单代码。
主 Activity .java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = findViewById(R.id.edit_text);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
Log.i("CHEOK", ">>>" + editable.toString() + "<<<");
doSomething(editable.toString());
}
private void doSomething() {}
});
}
}
activity_main.xml
<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textMultiLine|textNoSuggestions"
android:imeOptions="actionSend" />
这是它的行为方式。
没有拼写建议时
当我按下 ENTER 时
afterTextChanged
被触发一次,输出如下。
>>>123
456<<<
有拼写建议时
当我按下 ENTER 时
afterTextChanged
被多次 触发,输出如下。
>>>def<<<
>>><<<
>>>abc
<<<
>>>abc
def<<<
我对中间的中间文本不感兴趣。我只对最终文本感兴趣(abc\ndef
)
我怎么可能有这样的东西
@Override
public void afterTextChanged(Editable editable) {
if (isFinalText(edittable.toString())) {
doSomething(editable.toString());
}
}
不关闭拼写建议。
P/S
我不介意扩展 EditText
,并在其中进行一些修改。但是,我曾尝试在 EditText
中覆盖 dispatchKeyEvent
和 onKeyPreIme
。不确定为什么他们没有被调用。
P/S/S
我也在尝试 https://stackoverflow.com/a/8063533/72437 中讨论的 onEditorAction
技术 它不适用于我的情况,因为我的 EditText
是多行的。
最佳答案
最后我得出结论:
editText.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 (prevString.length() >= s.length()) {
if (userIsInteracting) {
doSomething(s.toString());
}
} else {
doSomething(s.toString());
}
prevString = s.toString();
}
});
editText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL)
userIsInteracting = true;
Log.d("key event", keyCode + event.toString());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
userIsInteracting = false;
}
}, 1000);
return false;
}
});
请尝试一下,它肯定会起作用。我尝试并完美地工作。 快乐编码!!!
关于android - 如何接收带有拼写建议的 EditText 的最终 afterTextChanged 事件(不关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49443496/