我怎么知道何时编辑完编辑文本?就像用户选择下一个框或按下软键盘上的完成按钮时一样。
我想知道这一点,以便可以钳位输入。看起来像文本查看器的afterTextChanged发生在输入每个字符之后。我需要对输入进行一些计算,因此我想避免在输入每个字符后进行计算。
谢谢
Answers:
通过使用这样的东西
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;
}
});
EditorInfo.IME_ACTION_NEXT
和IME_ACTION_PREVIOUS
。我只是通过将答案添加到代码中来编辑答案
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();
}
}
});