TextWatcher 使 Edittext 中的打字变慢(Android)

TextWatcher makes Typing slow in Edittext(Android)

我使用以下代码获取文本更改功能中的键入状态.....

mEditText.addTextChangedListener(new TextWatcher() {
        public void afterTextChanged(Editable s) {
            try {
                session.typing();
            } catch (OmegleException e) {
                e.printStackTrace();
            }
        }
        public void beforeTextChanged(CharSequence s, int start, 
                int count, int after) {

        }
        public void onTextChanged(CharSequence s, int start, 
                int before, int count) {

        }
    });

尝试这样的东西 - 猜猜这是一个聊天应用程序吧 -

final Random ran = new Random();
mEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, 
            int count, int after) {}
    public void onTextChanged(CharSequence s, int start, 
            int before, int count) {
             if(start %2 ==0 && ran.nextBoolean()){
                 try {
                   session.typing();
                 } catch (OmegleException e) {
                       e.printStackTrace();
                 }
    }
});

编辑

b4 我完成了你的最后一个请求,你介意在新线程上运行 session.typing 吗,就像这样

new Thread(new Runnable() {
            @Override
            public void run() {
              try {
                   session.typing();
                 } catch (OmegleException e) {
                       e.printStackTrace();
                 }
              }
           }).start();

编辑 2

输入第一个字母

mEditText.addTextChangedListener(new TextWatcher() {
    public void afterTextChanged(Editable s) {}
    public void beforeTextChanged(CharSequence s, int start, 
            int count, int after) {}
    public void onTextChanged(CharSequence s, int start, 
            int before, int count) {
             if(start ==1){
                 try {
                   session.typing();
                 } catch (OmegleException e) {
                       e.printStackTrace();
                 }
    }
});
It can be fixed by changing the EditText width to 0dp using weighted widths to 
match/fill the parent.

我不确定为什么会发生这种情况,但我相信这是因为当 EditText 的宽度设置为环绕内容时,它会 adjust/redraw 自身以适应所有内容。因此,通过使 EditText 具有固定宽度,不再需要重绘。

宽度的“0dp”表示什么?它应该占用所有可用的 space?

是的,会的。 layout_weight 标签可以做到这一点。

 <EditText
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"/>

对于你的问题,我有一个建议给你:

将您的状态设置为正在键入,直到用户不按键盘上的完成按钮。

editText.setOnEditorActionListener(new EditText.OnEditorActionListener() {
@Override
public boolean onEditorAction(EditText v, int actionId, KeyEvent event) {
 if (actionId == EditorInfo.IME_ACTION_DONE) {
 //do here your stuff f
 return true;
 }
 return false;
} });