如何检测用户是否停止在EditText中输入android
我的布局中有一个EditText字段。我想在用户停止输入该编辑文本时执行操作。我已经实现TextWatcher和使用它的功能如何检测用户是否停止在EditText中输入android
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override
public void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { }
@Override
public void afterTextChanged(Editable editable) {
}
功能onTextChanged和afterTextChanged得到的只是输入任何字符后调用,但我想执行操作的用户停止在的EditText字段中输入后,就像Facebook并在它的“登记“页面。
我该如何实现这一点,请告诉我,如果有人在这里有任何想法。
先进的感谢一吨。
这就是我为我做的和为我工作的!
long delay = 1000; // 1 seconds after user stops typing
long last_text_edit = 0;
Handler handler = new Handler();
private Runnable input_finish_checker = new Runnable() {
public void run() {
if (System.currentTimeMillis() > (last_text_edit + delay - 500)) {
// TODO: do what you need here
// ............
// ............
DoStaff();
}
}
};
EditText editText = (EditText) findViewById(R.id.editTextStopId);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged (CharSequence s,int start, int count,
int after){
}
@Override
public void onTextChanged (final CharSequence s, int start, int before,
int count){
//You need to remove this to run only once
handler.removeCallbacks(input_finish_checker);
}
@Override
public void afterTextChanged (final Editable s){
//avoid triggering event when text is empty
if (s.length() > 0) {
last_text_edit = System.currentTimeMillis();
handler.postDelayed(input_finish_checker, delay);
} else {
}
}
}
);
这是一种有点不同的方法。但你可以做这样的事情
我假设在用户开始在edittext中输入内容后,他没有输入特定的时间段,而是可以认为他停止了输入。
editText.addTextChangedListener(new TextWatcher() {
boolean isTyping = false;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
private Timer timer = new Timer();
private final long DELAY = 5000; // milliseconds
@Override
public void afterTextChanged(final Editable s) {
Log.d("", "");
if(!isTyping) {
Log.d(TAG, "started typing");
// Send notification for start typing event
isTyping = true;
}
timer.cancel();
timer = new Timer();
timer.schedule(
new TimerTask() {
@Override
public void run() {
isTyping = false;
Log.d(TAG, "stopped typing");
//send notification for stopped typing event
}
},
DELAY
);
}
});
基本上你在这里做的,只要用户开始输入,如果有5000毫秒改变的EditText中的文本的时间间隔,你认为是用户已经停止打字。当然,你可以改变任何你想要的时间
你可以使用焦点更改侦听器。如果EditText上具有焦点再假设用户仍在编辑,否则他们已经停止了,你可以执行你的行动:
EditText et = new EditText(mContext);
et.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean hasFocus) {
if (hasFocus) {
//user has focused
} else {
//focus has stopped perform your desired action
}
}
});
也许会叫代码帮助您
yourEdiTtext.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) {
//Write your code for on change in edittext
}
@Override
public void afterTextChanged(Editable s) {
}
});
我用CountDownTimer如果用户找出停止打字后不久。我希望能提供帮助。
yourEditText.addTextChangedListener(new TextWatcher() {
CountDownTimer timer = null;
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (timer != null) {
timer.cancel();
}
timer = new CountDownTimer(1500, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
//do what you wish
}
}.start();
}
@Override
public void afterTextChanged(Editable s) {
}
});
有一个非常简单和容易做这个使用RxBindings
为Android的方式,
获取库,如果你还没有准备好,
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
添加和修改这个代码段您的需求,
RxTextView.textChanges(mEditText)
.debounce(3, TimeUnit.SECONDS)
.subscribe(textChanged -> {
Log.d("TAG", "Stopped typing!");
});
什么是防抖操作? - Learn more about it here
在我们的背景下,反跳,只会在一定时间已经从该EditText
内发生的最终文本的变化通过后通知您EditText
中的文本改变。
在这里,我正在等待3秒,直到上一次文本更改发生,以断定用户已停止键入。你可以根据你的需要修改它。
我个人不喜欢这种方法,如果用户在输入文本时与朋友交谈并停止输入,该怎么办?你可以通过增加时间来解决这个问题,但是所需的效果将会丢失。 – Hughzi
但比没有更好的方式来断定他是否打字。 –
如果他们已将焦点从编辑文本中除去,那么他们不可能键入, – Hughzi