了解编辑文本何时完成编辑
我如何知道编辑文本何时被编辑? 就像用户select下一个方框,或者按下软键盘上的完成button。
我想知道这个,所以我可以钳制input。 它看起来像文本观察者的afterTextChanged发生在每个字符input后。 我需要对input做一些计算,所以我想避免在input每个字符后进行计算。
谢谢
通过使用这样的东西
meditText.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if (actionId == EditorInfo.IME_ACTION_DONE) { yourcalc(); return true; } return false; } });
EditText
inheritancesetOnFocusChangeListener
,它接受setOnFocusChangeListener
的实现。
实现onFocusChange
, hasFocus
有一个布尔参数。 当这是错误的,你已经失去了焦点到另一个控制。
编辑
要处理这两种情况 – 编辑丢失焦点的文本或者用户单击“完成”button – 创build一个从两个侦听器中调用的方法。
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" />
当用户单击软键盘上的“完成”button(OnEditorActionListener)时,或者ii)当EditText丢失了现在位于另一个EditText上的用户焦点(OnFocusChangeListener)时,我们可以捕获它的文本i)
/** * 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
我做了这个简单的事情,当焦点从编辑文本转移到文本。 这将工作,如果用户转移焦点select其他视图,如button或其他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()方法。