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;
} });
我使用以下代码获取文本更改功能中的键入状态.....
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;
} });