默认情况下软键盘右下角的按钮为“下一个”,点击会到下一个输入框,保持软键盘

android 回车键事件编程_android



设置 android:imeOptions="actionDone" ,软键盘下方变成“完成”,点击后光标保持在原来的输入框上,并且软键盘关闭


android 回车键事件编程_回车键_02







android:imeOptions="actionSend" 软键盘下方变成“发送”,点击后光标移动下一个



android 回车键事件编程_回车键_03







在这里设置的imeOptions如何使用呢?如下面的代码,让EditText实现setOnEditorActionListener,在onEditAction方法中actionId就对应我们设置的imeOptions。系统默认的actionId有:EditorInfo.IME_NULL、EditorInfo.IME_ACTION_SEND、EditorInfo.IME_ACTION_DONE等。这样我们就可以根据不同的EditText来实现不同的软键盘右下角功能键。








Java代码 android 回车键事件编程_ide_04


  1. package com.test;

  2. import com.test.main.TestAsyn;

  3. import android.app.Activity;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.view.inputmethod.EditorInfo;
  7. import android.widget.EditText;
  8. import android.widget.TextView;
  9. import android.widget.TextView.OnEditorActionListener;
  10. import android.widget.Toast;

  11. public class IMFActivity extends Activity implements OnEditorActionListener {

  12. EditText etDefault;
  13. EditText etEmail;
  14. EditText etNumber;

  15. /** Called when the activity is first created. */
  16. @Override
  17. public void onCreate(Bundle savedInstanceState) {
  18. super.onCreate(savedInstanceState);
  19. setContentView(R.layout.imf_layout);

  20. etDefault = (EditText)findViewById(R.id.default_content);
  21. etEmail = (EditText)findViewById(R.id.email_content);
  22. etNumber = (EditText)findViewById(R.id.number_content);
  23. etDefault.setOnEditorActionListener(this);
  24. etEmail.setOnEditorActionListener(this);
  25. etNumber.setOnEditorActionListener(this);

  26. }

  27. @Override
  28. public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  29. switch(actionId){
  30. case EditorInfo.IME_NULL:
  31. System.out.println("null for default_content: " + v.getText() );
  32. break;
  33. case EditorInfo.IME_ACTION_SEND:
  34. System.out.println("action send for email_content: " + v.getText());
  35. break;
  36. case EditorInfo.IME_ACTION_DONE:
  37. System.out.println("action done for number_content: " + v.getText());
  38. break;
  39. }
  40. //Toast.makeText(this, v.getText()+"--" + actionId, Toast.LENGTH_LONG).show();
  41. return true;
  42. }
  43. }





xml文件:






Xml代码 android 回车键事件编程_ide_04


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent" android:layout_height="fill_parent">

  4. <TableLayout android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <TableRow>
  7. <TextView android:text="No special rules" android:id="@+id/TextView01"
  8. android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
  9. <EditText android:text="1111111111111" android:id="@+id/default_content"
  10. android:layout_width="fill_parent" android:layout_height="wrap_content"></EditText>
  11. </TableRow>
  12. <TableRow>
  13. <TextView android:text="Email address:" android:id="@+id/TextView01"
  14. android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
  15. <EditText android:text="" android:id="@+id/email_content"
  16. android:layout_width="fill_parent" android:layout_height="wrap_content"
  17. android:inputType="text|textEmailAddress"
  18. android:imeOptions="actionSend"></EditText>
  19. </TableRow>
  20. <TableRow>
  21. <TextView android:text="Signed decimal number:" android:id="@+id/TextView01"
  22. android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
  23. <EditText android:text="" android:id="@+id/number_content"
  24. android:layout_width="fill_parent" android:layout_height="wrap_content"
  25. android:inputType="number|numberSigned|numberDecimal"
  26. android:imeOptions="actionDone"></EditText>
  27. </TableRow>
  28. </TableLayout>
  29. </ScrollView>














http://www.apkbus.com/forum.php?mod=viewthread&tid=45005



实现android按下回车键便隐藏输入键盘,有两种方法:

1.)如果布局是多个EditText,为每个EditText控件设置android:singleLine=”true”,弹出的软盘输入法中回车键为next,直到最后一个获取焦点后显示为Done,点击Done后,软盘输入键盘便隐藏。或者将EditText的imeOptions属性设置android:imeOptions=”actionDone”,则不管是不是最后一个EditText,点击回车键即隐藏输入法。

2.)监听Enter的事件,编写Enter的事件响应。设置文本框的OnKeyListener,当keyCode ==KeyEvent.KEYCODE_ENTER的时候,表明Enter键被按下,就可以编写自己事件响应功能了。

代码源:

 

具体代码:


  1. package listenter.main;

  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.view.KeyEvent;
  6. import android.view.View;
  7. import android.view.View.OnKeyListener;
  8. import android.view.inputmethod.InputMethodManager;
  9. import android.widget.EditText;

  10. public class EnterListenter extends Activity {
  11. /** Called when the activity is first created. */
  12. @Override
  13. public void onCreate(Bundle savedInstanceState) {
  14. super.onCreate(savedInstanceState);
  15. setContentView(R.layout.main);

  16. EditText password=(EditText)findViewById(R.id.password);

  17. password.setOnKeyListener(onKey);

  18. }

  19. OnKeyListener onKey=new OnKeyListener() {

  20. @Override

  21. public boolean onKey(View v, int keyCode, KeyEvent event) {

  22. // TODO Auto-generated method stub

  23. if(keyCode == KeyEvent.KEYCODE_ENTER){

  24. InputMethodManager imm = (InputMethodManager)v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

  25. if(imm.isActive()){

  26. imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0 );

  27. }

  28. return true;

  29. }

  30. return false;

  31. }

  32. };
  33. }

 

 

PS:

把EditText的Ime Options属性设置成不同的值,Enter键上可以显示不同的文字或图案
actionNone : 回车键,按下后光标到下一行
actionGo : Go,
actionSearch : 一个放大镜
actionSend : Send
actionNext : Next
actionDone : Done,隐藏软键盘,即使不是最后一个文本输入框



searchEdit.setOnEditorActionListener(new OnEditorActionListener() {

@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
switch (actionId) {
case EditorInfo.IME_NULL:
if(!(event.getAction() == KeyEvent.ACTION_UP && event.getKeyCode()==KeyEvent.KEYCODE_ENTER))
break;
case EditorInfo.IME_ACTION_GO:
case EditorInfo.IME_ACTION_DONE:
case EditorInfo.IME_ACTION_SEARCH:
// System.out.println("action done for number_content: " + v.getText());
InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm.isActive()) {
imm.hideSoftInputFromWindow(v.getApplicationWindowToken(), 0);
}
ServiceSearch.cond.key = searchEdit.getText().toString();
// log.e("", "Search key down: search key is:"+ServiceSearch.cond.key);
refreshSverListView(ServiceSearch.search());

break;
}
// Toast.makeText(TaskRabbit_HomePageActivity.this, v.getText() + "--" + actionId, Toast.LENGTH_LONG).show();
return true;
}
});