我怎么知道,当我编辑文本完成正在编辑? 就像当用户选择下一个框,或按软键盘上的完成按钮。
我想知道这一点,所以我可以夹住输入。 它看起来每输入一个字符后,如文本观察者的afterTextChanged发生。 我需要做一些计算和输入,所以我想每输入一个字符后,以避免做计算。
谢谢
我怎么知道,当我编辑文本完成正在编辑? 就像当用户选择下一个框,或按软键盘上的完成按钮。
我想知道这一点,所以我可以夹住输入。 它看起来每输入一个字符后,如文本观察者的afterTextChanged发生。 我需要做一些计算和输入,所以我想每输入一个字符后,以避免做计算。
谢谢
通过使用这样的事情
meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId){
case EditorInfo.IME_ACTION_DONE:
case EditorInfo.IME_ACTION_NEXT:
case EditorInfo.IME_ACTION_PREVIOUS:
yourcalc();
return true;
}
return false;
}
});
EditText
继承setOnFocusChangeListener
这需要的实现OnFocusChangeListener
。
实施onFocusChange
并有一个布尔参数hasFocus
。 如果这是假的,你已经失去焦点到另一个控件。
编辑
处理这两种情况 - 编辑文本失去焦点或用户点击“完成”按钮 - 创建得到来自听众称为单一的方法。
private void calculate() { ... }
btnDone.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
calculate();
}
});
txtEdit.setOnFocusChangeListener(new OnFocusChangeListener() {
public void onFocusChange(View v, boolean hasFocus) {
if(!hasFocus)
calculate();
}
});
使用这样定义的一个EditText对象的xml:
<EditText
android:id="@+id/create_survey_newquestion_editText_minvalue"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:ems="4"
android:imeOptions="actionDone"
android:inputType="number" />
我们可以捕获它的文本i)当用户点击软键盘(OnEditorActionListener)或完成按钮II)时的EditText失去了用户关注的焦点(OnFocusChangeListener)现在是另一个的EditText:
/**
* 3. Set the min value EditText listener
*/
editText= (EditText) this.viewGroup.findViewById(R.id.create_survey_newquestion_editText_minvalue);
editText.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event)
{
String input;
if(actionId == EditorInfo.IME_ACTION_DONE)
{
input= v.getText().toString();
MyActivity.calculate(input);
return true; // consume.
}
return false; // pass on to other listeners.
}
});
editText.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
@Override
public void onFocusChange(View v, boolean hasFocus)
{
String input;
EditText editText;
if(!hasFocus)
{
editText= (EditText) v;
input= editText.getText().toString();
MyActivity.calculate(input);
}
}
});
这对我的作品。 您可以隐藏软键盘后进行使用这样的代码的计算:
private void hideKeyboard(EditText editText)
{
InputMethodManager imm= (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
编辑:添加返回值来onEditorAction
我已经这样做了简单的事情,当焦点从编辑文本转向获取文本。 如果用户将焦点移到选择像的按钮或其他的EditText或任何视图其他视图这将工作。
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus) {
EditText editText = (EditText) v;
String text = editText.getText().toString();
}
}
});
更高水平你可以使用TextWatcher的afterTextChanged()方法。