关于输入法键盘的Enter键

来源:互联网 发布:linux动态打印日志 编辑:程序博客网 时间:2024/05/01 08:18
转自:http://hi.baidu.com/zijie410/blog/item/4fc216c33201c10d0ef477e9.html

软键盘的Enter键默认显示的是“完成”文本,我们知道按Enter建表示前置工作已经准备完毕了,要去什么什么啦。比如,在一个搜索中,我们输入要搜索的文本,然后按Enter表示要去搜索了,但是默认的Enter键显示的是“完成”文本,看着不太合适,不符合搜索的语义,如果能显示“搜索”两个字或者显示一个表示搜索的图标多好。事实证明我们的想法是合理的,Android也为我们提供的这样的功能。通过设置android:imeOptions来改变默认的“完成”文本。这里举几个常用的常量值:
actionUnspecified  未指定,对应常量EditorInfo.IME_ACTION_UNSPECIFIED.效果:   e9690a0fe28d22b037d12275.jpg 
actionNone 没有动作,对应常量EditorInfo.IME_ACTION_NONE 效果: 02d6d7398fb7e77496ddd874.jpg 
actionGo 去往,对应常量EditorInfo.IME_ACTION_GO 效果: 72f77f1092e93147b8127b76.jpg 
actionSearch 搜索,对应常量EditorInfo.IME_ACTION_SEARCH 效果:   3a490c080b0780736a60fb70.jpg 
actionSend 发送,对应常量EditorInfo.IME_ACTION_SEND 效果: 6795cb301e33c54eeac4af72.jpg 
actionNext 下一个,对应常量EditorInfo.IME_ACTION_NEXT 效果: 4f57138aa8be51289f2fb47c.jpg 
actionDone 完成,对应常量EditorInfo.IME_ACTION_DONE 效果: 4f80957eaf46715f29388a7d.jpg 

下面以搜索为例,演示一个实例,修改main.xml如下:
Xml代码:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText  
  8.     android:id="@+id/edit_text"     
  9.     android:layout_width="fill_parent"    
  10.     android:layout_height="wrap_content"  
  11.     android:imeOptions="actionSearch"/>  
  12. </LinearLayout> 

  13. <?xml version="1.0" encoding="utf-8"?>
  14. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  15.     android:orientation="vertical"
  16.     android:layout_width="fill_parent"
  17.     android:layout_height="fill_parent"
  18.     >
  19. <EditText
  20. android:id="@+id/edit_text"  
  21.     android:layout_width="fill_parent" 
  22.     android:layout_height="wrap_content"
  23.     android:imeOptions="actionSearch"/>
  24. </LinearLayout>
复制代码
修改HelloEditText如下:
  1. package com.flysnow;   
  2.   
  3. import android.app.Activity;   
  4. import android.os.Bundle;   
  5. import android.view.KeyEvent;   
  6. import android.widget.EditText;   
  7. import android.widget.TextView;   
  8. import android.widget.Toast;   
  9. import android.widget.TextView.OnEditorActionListener;   
  10.   
  11. public class HelloEditText extends Activity {   
  12.     /** Called when the activity is first created. */  
  13.     @Override  
  14.     public void onCreate(Bundle savedInstanceState) {   
  15.         super.onCreate(savedInstanceState);   
  16.         setContentView(R.layout.main);   
  17.         EditText editText=(EditText)findViewById(R.id.edit_text);   
  18.         editText.setOnEditorActionListener(new OnEditorActionListener() {   
  19.             @Override  
  20.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {   
  21.                 Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();   
  22.                 return false;   
  23.             }   
  24.         });   
  25.     }   


  26. package com.flysnow;

  27. import android.app.Activity;
  28. import android.os.Bundle;
  29. import android.view.KeyEvent;
  30. import android.widget.EditText;
  31. import android.widget.TextView;
  32. import android.widget.Toast;
  33. import android.widget.TextView.OnEditorActionListener;

  34. public class HelloEditText extends Activity {
  35.     /** Called when the activity is first created. */
  36.     @Override
  37.     public void onCreate(Bundle savedInstanceState) {
  38.         super.onCreate(savedInstanceState);
  39.         setContentView(R.layout.main);
  40.         EditText editText=(EditText)findViewById(R.id.edit_text);
  41.         editText.setOnEditorActionListener(new OnEditorActionListener() {
  42.    @Override
  43.    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  44.     Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  45.     return false;
  46.    }
  47.   });
  48.     }
  49. }
复制代码
运行程序,点击回车(也就是搜索图标软键盘按钮)会显示该actionId.我们上面的每一个设置都会对应一个常量,这里的actionId就是那个常量值。

11657a94d433db1cd0135e7b.jpg 

EditText的取值、全选、部分选择、获取选中文本
       下面通过一个例子来演示EditText的取值、全选、部分选择和获取选中文本.main.xml修改如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <EditText  
  8.     android:id="@+id/edit_text"     
  9.     android:layout_width="fill_parent"    
  10.     android:layout_height="wrap_content"  
  11.     android:imeOptions="actionSearch"/>  
  12. <Button    
  13.     android:id="@+id/btn_get_value"  
  14.     android:text="取值"  
  15.     android:layout_width="wrap_content"  
  16.     android:layout_height="wrap_content"/>  
  17. <Button    
  18.     android:id="@+id/btn_all"  
  19.     android:text="全选"  
  20.     android:layout_width="wrap_content"  
  21.     android:layout_height="wrap_content"/>  
  22. <Button    
  23.     android:id="@+id/btn_select"  
  24.     android:text="从第2个字符开始选择"  
  25.     android:layout_width="wrap_content"  
  26.     android:layout_height="wrap_content"/>  
  27. <Button    
  28.     android:id="@+id/btn_get_select"  
  29.     android:text="获取选中文本"  
  30.     android:layout_width="wrap_content"  
  31.     android:layout_height="wrap_content"/>  
  32. </LinearLayout> 

  33. <?xml version="1.0" encoding="utf-8"?>
  34. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  35.     android:orientation="vertical"
  36.     android:layout_width="fill_parent"
  37.     android:layout_height="fill_parent"
  38.     >
  39. <EditText
  40. android:id="@+id/edit_text"  
  41.     android:layout_width="fill_parent" 
  42.     android:layout_height="wrap_content"
  43.     android:imeOptions="actionSearch"/>
  44. <Button 
  45. android:id="@+id/btn_get_value"
  46. android:text="取值"
  47. android:layout_width="wrap_content"
  48. android:layout_height="wrap_content"/>
  49. <Button 
  50. android:id="@+id/btn_all"
  51. android:text="全选"
  52. android:layout_width="wrap_content"
  53. android:layout_height="wrap_content"/>
  54. <Button 
  55. android:id="@+id/btn_select"
  56. android:text="从第2个字符开始选择"
  57. android:layout_width="wrap_content"
  58. android:layout_height="wrap_content"/>
  59. <Button 
  60. android:id="@+id/btn_get_select"
  61. android:text="获取选中文本"
  62. android:layout_width="wrap_content"
  63. android:layout_height="wrap_content"/>
  64. </LinearLayout>
复制代码
HelloEditText修改如下:
  1. package com.flysnow;   
  2. import android.app.Activity;   
  3. import android.os.Bundle;   
  4. import android.text.Editable;   
  5. import android.text.Selection;   
  6. import android.view.KeyEvent;   
  7. import android.view.View;   
  8. import android.view.View.OnClickListener;   
  9. import android.widget.Button;   
  10. import android.widget.EditText;   
  11. import android.widget.TextView;   
  12. import android.widget.Toast;   
  13. import android.widget.TextView.OnEditorActionListener;   
  14. /**  
  15. * EditText演示  
  16. * @author 飞雪无情  
  17. * @since 2010-11-29  
  18. */  
  19. public class HelloEditText extends Activity {   
  20.     /** Called when the activity is first created. */  
  21.     @Override  
  22.     public void onCreate(Bundle savedInstanceState) {   
  23.         super.onCreate(savedInstanceState);   
  24.         setContentView(R.layout.main);   
  25.         final EditText editText=(EditText)findViewById(R.id.edit_text);   
  26.         //监听回车键   
  27.         editText.setOnEditorActionListener(new OnEditorActionListener() {   
  28.             @Override  
  29.             public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {   
  30.                 Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();   
  31.                 return false;   
  32.             }   
  33.         });   
  34.         //获取EditText文本   
  35.         Button getValue=(Button)findViewById(R.id.btn_get_value);   
  36.         getValue.setOnClickListener(new OnClickListener() {   
  37.             @Override  
  38.             public void onClick(View v) {   
  39.                 Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();   
  40.             }   
  41.         });   
  42.         //让EditText全选   
  43.         Button all=(Button)findViewById(R.id.btn_all);   
  44.         all.setOnClickListener(new OnClickListener() {   
  45.             @Override  
  46.             public void onClick(View v) {   
  47.                 editText.selectAll();   
  48.             }   
  49.         });   
  50.         //从第2个字符开始选择EditText文本   
  51.         Button select=(Button)findViewById(R.id.btn_select);   
  52.         select.setOnClickListener(new OnClickListener() {   
  53.             @Override  
  54.             public void onClick(View v) {   
  55.                 Editable editable=editText.getText();   
  56.                 Selection.setSelection(editable, 1,editable.length());   
  57.             }   
  58.         });   
  59.       //获取选中的文本   
  60.         Button getSelect=(Button)findViewById(R.id.btn_get_select);   
  61.         getSelect.setOnClickListener(new OnClickListener() {   
  62.             @Override  
  63.             public void onClick(View v) {   
  64.                 int start=editText.getSelectionStart();   
  65.                 int end=editText.getSelectionEnd();   
  66.                 CharSequence selectText=editText.getText().subSequence(start, end);   
  67.                 Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();   
  68.             }   
  69.         });   
  70.     }   
  71.     /**  
  72.      * 交换两个索引  
  73.      * @param start 开始索引  
  74.      * @param end 结束索引  
  75.      */  
  76.     protected void switchIndex(int start, int end) {   
  77.         int temp=start;   
  78.         start=end;   
  79.         end=temp;   
  80.     }   


  81. package com.flysnow;

  82. import android.app.Activity;
  83. import android.os.Bundle;
  84. import android.text.Editable;
  85. import android.text.Selection;
  86. import android.view.KeyEvent;
  87. import android.view.View;
  88. import android.view.View.OnClickListener;
  89. import android.widget.Button;
  90. import android.widget.EditText;
  91. import android.widget.TextView;
  92. import android.widget.Toast;
  93. import android.widget.TextView.OnEditorActionListener;
  94. /**
  95. * EditText演示
  96. * @author 飞雪无情
  97. * @since 2010-11-29
  98. */
  99. public class HelloEditText extends Activity {
  100.     /** Called when the activity is first created. */
  101.     @Override
  102.     public void onCreate(Bundle savedInstanceState) {
  103.         super.onCreate(savedInstanceState);
  104.         setContentView(R.layout.main);
  105.         final EditText editText=(EditText)findViewById(R.id.edit_text);
  106.         //监听回车键
  107.         editText.setOnEditorActionListener(new OnEditorActionListener() {
  108.    @Override
  109.    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
  110.     Toast.makeText(HelloEditText.this, String.valueOf(actionId), Toast.LENGTH_SHORT).show();
  111.     return false;
  112.    }
  113.   });
  114.         //获取EditText文本
  115.         Button getValue=(Button)findViewById(R.id.btn_get_value);
  116.         getValue.setOnClickListener(new OnClickListener() {
  117.    @Override
  118.    public void onClick(View v) {
  119.     Toast.makeText(HelloEditText.this, editText.getText().toString(), Toast.LENGTH_SHORT).show();
  120.    }
  121.   });
  122.         //让EditText全选
  123.         Button all=(Button)findViewById(R.id.btn_all);
  124.         all.setOnClickListener(new OnClickListener() {
  125.    @Override
  126.    public void onClick(View v) {
  127.     editText.selectAll();
  128.    }
  129.   });
  130.         //从第2个字符开始选择EditText文本
  131.         Button select=(Button)findViewById(R.id.btn_select);
  132.         select.setOnClickListener(new OnClickListener() {
  133.    @Override
  134.    public void onClick(View v) {
  135.     Editable editable=editText.getText();
  136.     Selection.setSelection(editable, 1,editable.length());
  137.    }
  138.   });
  139.       //获取选中的文本
  140.         Button getSelect=(Button)findViewById(R.id.btn_get_select);
  141.         getSelect.setOnClickListener(new OnClickListener() {
  142.    @Override
  143.    public void onClick(View v) {
  144.     int start=editText.getSelectionStart();
  145.     int end=editText.getSelectionEnd();
  146.     CharSequence selectText=editText.getText().subSequence(start, end);
  147.     Toast.makeText(HelloEditText.this, selectText, Toast.LENGTH_SHORT).show();
  148.    }
  149.   });
  150.     }
  151.     /**
  152.      * 交换两个索引
  153.      * @param start 开始索引
  154.      * @param end 结束索引
  155.      */
  156. protected void switchIndex(int start, int end) {
  157.   int temp=start;
  158.   start=end;
  159.   end=temp;
  160. }
  161. }
复制代码
运行效果如下:
e06ead31dc56cecea8018e46.jpg 
可以通过输入文字和点击下面的按钮测试。
0 0