正文  UI设计 > 文本编辑/EditText >

Android软件开发之EditText 详解

EditText在API中的结构java.lang.Objectandroid.view.Viewandroid.widget.TextView android.widget.EditText已知直接子类:AutoCompleteTextView, ExtractEditText已知间接子类:MultiAutoCompleteTextView E......

EditText在API中的结构 


java.lang.Object
android.view.View
android.widget.TextView        
android.widget.EditText

已知直接子类:
AutoCompleteTextView, ExtractEditText

已知间接子类:
MultiAutoCompleteTextView

       
       EditText是TextView的直接子类 所以EditText会继承父类TextView的一些方法。下面我用自己写的一个Demo 和大家详细的说明一下EditView的使用方法。 



1.简单的EditText输入框 

       非常简单,在layout布局中配置一下EditText 在配置一个Button 在代码中监听Button 的事件 获取当前EditView中输入的内容并且显示出来。 

 
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/textviewll"  
  4.     android:orientation="vertical" android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <EditText    
  7.       android:id="@+id/sample_edit_text0"      
  8.       android:layout_width="fill_parent"     
  9.       android:layout_height="wrap_content"   
  10.       android:text="简单的EditText输入框"/>   
  11.     <Button   
  12.       android:id="@+id/sample_button0"  
  13.       android:layout_width="fill_parent" android:layout_height="wrap_content"  
  14.       android:text="确定"/>  
  15. </LinearLayout>  
 
  1. public class SampleActivity extends Activity {  
  2.     @Override  
  3.     protected void onCreate(Bundle savedInstanceState) {  
  4.     setContentView(R.layout.sample);  
  5.       
  6.     final EditText editText0 = (EditText)findViewById(R.id.sample_edit_text0);  
  7.   
  8.     Button button0 = (Button)findViewById(R.id.sample_button0);  
  9.   
  10.     button0.setOnClickListener(new OnClickListener() {  
  11.           
  12.         @Override  
  13.         public void onClick(View arg0) {  
  14.         String str = editText0.getText().toString();  
  15.         Toast.makeText(SampleActivity.this,str, Toast.LENGTH_LONG).show();  
  16.         }  
  17.     });  
  18.   
  19.     super.onCreate(savedInstanceState);  
  20.     }  
  21. }  



2.限制EditText输入框的内容 



 


 
在layout中配置信息

android:digits="1234567890.+-*/%\n()" 
限制输入框中只能输入自己定义的这些字符串 如果输入其它将不予以显示
android:phoneNumber="true"  
限制输入框中只能输入手机号码
android:password="true" 
限制输入框中输入的任何内容将以"*"符号来显示
android:hint="默认文字" 
输入内容前默认显示在输入框中的文字 
android:textColorHint="#FF0000"
设置文字内容颜色
android:enabled="false" 
设置输入框不能被编辑 


  


3.编辑框中显示图片 

      上一篇讲TextView中就讲过在TextView中添加图片的方法,因为EditText是TextView的子类, 所以当然也可以添加图片了,只是一旦在EditText中添加图片以后是不能删除的,如图所示我可以编辑图片旁边的内容,写入文字。 




 


  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout  xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/textviewll"  
  4.     android:orientation="vertical"   
  5.     android:layout_width="fill_parent"  
  6.     android:layout_height="fill_parent"  
  7.     >  
  8.     <EditText   
  9.               android:layout_width="wrap_content"   
  10.               android:layout_height="wrap_content"  
  11.               android:text="在图片下方"  
  12.               android:textColor="#FF0000"  
  13.               android:drawableBottom="@drawable/jay"  
  14.               android:layout_alignParentTop="true"  
  15.               android:layout_centerHorizontal="true"  
  16.               >  
  17.      </EditText>  
  18.     
  19.      <EditText   
  20.               android:layout_width="wrap_content"   
  21.               android:layout_height="wrap_content"  
  22.               android:text="在图片上方"  
  23.               android:textColor="#FF0000"  
  24.               android:drawableTop="@drawable/jay"  
  25.               android:layout_alignParentBottom="true"  
  26.               android:layout_centerHorizontal="true"  
  27.               >  
  28.      </EditText>   
  29.      <EditText   
  30.               android:layout_width="wrap_content"   
  31.               android:layout_height="wrap_content"  
  32.               android:text="在图片左边"  
  33.               android:textColor="#FF0000"  
  34.               android:drawableLeft="@drawable/jay"  
  35.              android:layout_alignParentLeft="true"  
  36.               android:layout_centerVertical="true"  
  37.               >  
  38.      </EditText>      
  39.      <EditText   
  40.               android:layout_width="wrap_content"   
  41.               android:layout_height="wrap_content"  
  42.               android:text="在图片右边"  
  43.               android:textColor="#FF0000"  
  44.               android:drawableRight="@drawable/jay"  
  45.               android:layout_alignParentRight="true"  
  46.               android:layout_centerVertical="true"  
  47.               >  
  48.      </EditText>   
  49.   
  50. </RelativeLayout >  



4.设置软键盘的Enter键 

如图所示我们可以修改软键盘的Enter按钮的样式,可以在代码中监听 按钮点击事件。 


 
  1. package cn.m15.xys;  
  2.   
  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.Toast;  
  10. import android.widget.TextView.OnEditorActionListener;  
  11.   
  12. public class KeyBoardActivity extends Activity {  
  13.     @Override  
  14.     protected void onCreate(Bundle savedInstanceState) {  
  15.     setContentView(R.layout.keyboard);  
  16.   
  17.     EditText editText0 = (EditText)findViewById(R.id.txtTest0);  
  18.       
  19.     editText0.setOnEditorActionListener(new OnEditorActionListener() {  
  20.   
  21.         @Override  
  22.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  23.         if (arg1 == EditorInfo.IME_ACTION_GO) {  
  24.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'去往'按钮",  
  25.                 Toast.LENGTH_SHORT).show();  
  26.         }  
  27.         return false;  
  28.         }  
  29.     });  
  30.     EditText editText1 = (EditText)findViewById(R.id.txtTest1);  
  31.       
  32.     editText1.setOnEditorActionListener(new OnEditorActionListener() {  
  33.   
  34.         @Override  
  35.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  36.         if (arg1 == EditorInfo.IME_ACTION_SEARCH) {  
  37.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'搜索'按钮",  
  38.                 Toast.LENGTH_SHORT).show();  
  39.         }  
  40.         return false;  
  41.         }  
  42.     });  
  43.     EditText editText2 = (EditText)findViewById(R.id.txtTest2);  
  44.       
  45.     editText2.setOnEditorActionListener(new OnEditorActionListener() {  
  46.   
  47.         @Override  
  48.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  49.         if (arg1 == EditorInfo.IME_ACTION_SEND) {  
  50.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'发送'按钮",  
  51.                 Toast.LENGTH_SHORT).show();  
  52.         }  
  53.         return false;  
  54.         }  
  55.     });  
  56.     EditText editText3 = (EditText)findViewById(R.id.txtTest3);  
  57.       
  58.     editText3.setOnEditorActionListener(new OnEditorActionListener() {  
  59.   
  60.         @Override  
  61.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  62.         if (arg1 == EditorInfo.IME_ACTION_NEXT) {  
  63.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'下一个'按钮",  
  64.                 Toast.LENGTH_SHORT).show();  
  65.         }  
  66.         return false;  
  67.         }  
  68.     });  
  69.     EditText editText4 = (EditText)findViewById(R.id.txtTest4);  
  70.       
  71.     editText4.setOnEditorActionListener(new OnEditorActionListener() {  
  72.   
  73.         @Override  
  74.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  75.         if (arg1 == EditorInfo.IME_ACTION_DONE) {  
  76.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'完成'按钮",  
  77.                 Toast.LENGTH_SHORT).show();  
  78.         }  
  79.         return false;  
  80.         }  
  81.     });  
  82.     EditText editText5 = (EditText)findViewById(R.id.txtTest5);  
  83.       
  84.     editText5.setOnEditorActionListener(new OnEditorActionListener() {  
  85.   
  86.         @Override  
  87.         public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {  
  88.         if (arg1 == EditorInfo.IME_ACTION_UNSPECIFIED) {  
  89.             Toast.makeText(KeyBoardActivity.this, "你点了软键盘'未指定'按钮",  
  90.                 Toast.LENGTH_SHORT).show();  
  91.         }  
  92.         return false;  
  93.         }  
  94.     });  
  95.     super.onCreate(savedInstanceState);  
  96.     }  
  97. }  


监听软键盘的点击事件 

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/textviewll"  
  4.     android:orientation="vertical" android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <EditText android:id="@+id/txtTest0"   
  7.      android:imeOptions="actionGo"  
  8.      android:layout_width="fill_parent"  
  9.      android:layout_height="wrap_content"  
  10.      android:hint="特殊按钮-去往"  
  11.      ></EditText>  
  12.     <EditText android:id="@+id/txtTest1"   
  13.      android:imeOptions="actionSearch"  
  14.      android:layout_width="fill_parent"  
  15.      android:layout_height="wrap_content"  
  16.      android:hint="特殊按钮-搜索"  
  17.      ></EditText>  
  18.     <EditText android:id="@+id/txtTest2"   
  19.      android:imeOptions="actionSend"  
  20.      android:layout_width="fill_parent"  
  21.      android:layout_height="wrap_content"  
  22.      android:hint="特殊按钮-发送"  
  23.      ></EditText>  
  24.     <EditText android:id="@+id/txtTest3"   
  25.      android:imeOptions="actionNext"  
  26.      android:layout_width="fill_parent"  
  27.      android:layout_height="wrap_content"  
  28.      android:hint="特殊按钮-下一个"  
  29.      ></EditText>  
  30.     <EditText android:id="@+id/txtTest4"   
  31.      android:imeOptions="actionDone"  
  32.      android:layout_width="fill_parent"  
  33.      android:layout_height="wrap_content"  
  34.      android:hint="特殊按钮-完成"  
  35.      ></EditText>  
  36.     <EditText android:id="@+id/txtTest5"   
  37.      android:imeOptions="actionUnspecified"  
  38.      android:layout_width="fill_parent"  
  39.      android:layout_height="wrap_content"  
  40.      android:hint="特殊按钮-未指定"  
  41.      ></EditText>  
  42.   
  43. </LinearLayout>  

5.监听软键盘的按键事件 

        做项目的时候 有时候须要在用户输入内容时做检测,比如如果用户输入不合法的内容不予以显示在EditText中, 这时候我就要用到addTextChangedListener 用它来监听用户输入状态。可以在监听中改变用户输入的内容或者提示用户输入内容不合法等等。 如图所示我的每次输入操作都可以被正常的监听出来,用户输入内容的正常流程 beforeTextChanged()  -》onTextChanged()  -》afterTextChanged()然后是通知屏幕绘制 显示在屏幕上 所以我们可以在这三个方法中来修改用户输入内容 或者截取用户输入的内容。 




 


  1. package cn.m15.xys;  
  2.   
  3. import android.app.Activity;  
  4. import android.os.Bundle;  
  5. import android.text.Editable;  
  6. import android.text.TextWatcher;  
  7. import android.widget.EditText;  
  8. import android.widget.TextView;  
  9.   
  10. public class MonitorKeyActivity extends Activity {  
  11.     @Override  
  12.     protected void onCreate(Bundle savedInstanceState) {  
  13.     setContentView(R.layout.monitorkey);  
  14.     EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);  
  15.     final TextView textView0 = (TextView)findViewById(R.id.monitor_text0);  
  16.     final TextView textView1 = (TextView)findViewById(R.id.monitor_text1);  
  17.     final TextView textView2 = (TextView)findViewById(R.id.monitor_text2);  
  18.       
  19.     editText.addTextChangedListener(new TextWatcher() {  
  20.           
  21.         @Override  
  22.         public void onTextChanged(CharSequence text, int start, int before, int count) {  
  23.                 //text  输入框中改变后的字符串信息  
  24.         //start 输入框中改变后的字符串的起始位置  
  25.         //before 输入框中改变前的字符串的位置 默认为0  
  26.         //count 输入框中改变后的一共输入字符串的数量  
  27.         textView1.setText("输入后字符串 [ " + text.toString() + " ] 起始光标 [ " + start + " ] 输入数量 [ " + count+" ]");  
  28.           
  29.         }  
  30.           
  31.         @Override  
  32.         public void beforeTextChanged(CharSequence text, int start, int count,int after) {  
  33.         //text  输入框中改变前的字符串信息  
  34.         //start 输入框中改变前的字符串的起始位置  
  35.         //count 输入框中改变前后的字符串改变数量一般为0  
  36.         //after 输入框中改变后的字符串与起始位置的偏移量  
  37.         System.out.println(text.toString());  
  38.         textView0.setText("输入前字符串 [ " + text.toString() + " ]起始光标 [ " + start + " ]结束偏移量  [" + after + " ]");  
  39.         }  
  40.           
  41.         @Override  
  42.         public void afterTextChanged(Editable edit) {  
  43.         //edit  输入结束呈现在输入框中的信息  
  44.         textView2.setText("输入结束后的内容为 [" + edit.toString()+" ] 即将显示在屏幕上");  
  45.         }  
  46.     });  
  47.       
  48.     super.onCreate(savedInstanceState);  
  49.     }  
  50. }  
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/textviewll"  
  4.     android:orientation="vertical" android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent">  
  6.     <TextView    
  7.       android:id="@+id/monitor_text0"      
  8.       android:layout_width="fill_parent"     
  9.       android:layout_height="wrap_content"   
  10.       android:textSize="18dip"  
  11.       android:textColor="#FF0000"/>   
  12.     <TextView    
  13.       android:id="@+id/monitor_text1"      
  14.       android:layout_width="fill_parent"     
  15.       android:layout_height="wrap_content"  
  16.       android:textSize="18dip"  
  17.       android:textColor="#FF0000"  
  18.       />   
  19.     <TextView    
  20.       android:id="@+id/monitor_text2"      
  21.       android:layout_width="fill_parent"     
  22.       android:layout_height="wrap_content"  
  23.       android:textSize="18dip"  
  24.       android:textColor="#FF0000"  
  25.       />   
  26.     <EditText    
  27.       android:id="@+id/monitor_edit_text0"      
  28.       android:layout_width="fill_parent"     
  29.       android:layout_height="wrap_content"   
  30.       android:hint="监听软键盘按键的输入状态"/>   
  31. </LinearLayout>