gpt4 book ai didi

android - 如何接收带有拼写建议的 EditText 的最终 afterTextChanged 事件(不关闭)

转载 作者:行者123 更新时间:2023-11-29 02:31:28 26 4
gpt4 key购买 nike

目前,我需要在 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 image description here

当我按下 ENTER 时

enter image description here

afterTextChanged 被触发一次,输出如下。

>>>123
456<<<

有拼写建议时

enter image description here

当我按下 ENTER 时

enter image description here

afterTextChanged多次 触发,输出如下。

>>>def<<<
>>><<<
>>>abc
<<<
>>>abc
def<<<

我对中间的中间文本不感兴趣。我只对最终文本感兴趣(abc\ndef)

我怎么可能有这样的东西

@Override
public void afterTextChanged(Editable editable) {
if (isFinalText(edittable.toString())) {
doSomething(editable.toString());
}
}

不关闭拼写建议。

P/S

我不介意扩展 EditText,并在其中进行一些修改。但是,我曾尝试在 EditText 中覆盖 dispatchKeyEventonKeyPreIme。不确定为什么他们没有被调用。

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com