Android软件开发之EditText 详解(八)

204
回复
1447475
查看
  [复制链接]

249

主题

278

帖子

17

安币

初级码农

Rank: 1

发表于 2011-9-2 22:54:03 | 显示全部楼层 |阅读模式
Android软件开发之EditText 详解

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.         Button button0 = (Button)findViewById(R.id.sample_button0);

  8.         button0.setOnClickListener(new OnClickListener() {
  9.             
  10.             @Override
  11.             public void onClick(View arg0) {
  12.                 String str = editText0.getText().toString();
  13.                 Toast.makeText(SampleActivity.this,str, Toast.LENGTH_LONG).show();
  14.             }
  15.         });

  16.         super.onCreate(savedInstanceState);
  17.     }
  18. }
复制代码
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. </RelativeLayout >
复制代码
4.设置软键盘的Enter键

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

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

  10. public class KeyBoardActivity extends Activity {
  11.     @Override
  12.     protected void onCreate(Bundle savedInstanceState) {
  13.         setContentView(R.layout.keyboard);

  14.         EditText editText0 = (EditText)findViewById(R.id.txtTest0);
  15.        
  16.         editText0.setOnEditorActionListener(new OnEditorActionListener() {

  17.             @Override
  18.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  19.                 if (arg1 == EditorInfo.IME_ACTION_GO) {
  20.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'去往'按钮",
  21.                             Toast.LENGTH_SHORT).show();
  22.                 }
  23.                 return false;
  24.             }
  25.         });
  26.         EditText editText1 = (EditText)findViewById(R.id.txtTest1);
  27.        
  28.         editText1.setOnEditorActionListener(new OnEditorActionListener() {

  29.             @Override
  30.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  31.                 if (arg1 == EditorInfo.IME_ACTION_SEARCH) {
  32.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'搜索'按钮",
  33.                             Toast.LENGTH_SHORT).show();
  34.                 }
  35.                 return false;
  36.             }
  37.         });
  38.         EditText editText2 = (EditText)findViewById(R.id.txtTest2);
  39.        
  40.         editText2.setOnEditorActionListener(new OnEditorActionListener() {

  41.             @Override
  42.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  43.                 if (arg1 == EditorInfo.IME_ACTION_SEND) {
  44.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'发送'按钮",
  45.                             Toast.LENGTH_SHORT).show();
  46.                 }
  47.                 return false;
  48.             }
  49.         });
  50.         EditText editText3 = (EditText)findViewById(R.id.txtTest3);
  51.        
  52.         editText3.setOnEditorActionListener(new OnEditorActionListener() {

  53.             @Override
  54.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  55.                 if (arg1 == EditorInfo.IME_ACTION_NEXT) {
  56.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'下一个'按钮",
  57.                             Toast.LENGTH_SHORT).show();
  58.                 }
  59.                 return false;
  60.             }
  61.         });
  62.         EditText editText4 = (EditText)findViewById(R.id.txtTest4);
  63.        
  64.         editText4.setOnEditorActionListener(new OnEditorActionListener() {

  65.             @Override
  66.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  67.                 if (arg1 == EditorInfo.IME_ACTION_DONE) {
  68.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'完成'按钮",
  69.                             Toast.LENGTH_SHORT).show();
  70.                 }
  71.                 return false;
  72.             }
  73.         });
  74.         EditText editText5 = (EditText)findViewById(R.id.txtTest5);
  75.        
  76.         editText5.setOnEditorActionListener(new OnEditorActionListener() {

  77.             @Override
  78.             public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
  79.                 if (arg1 == EditorInfo.IME_ACTION_UNSPECIFIED) {
  80.                     Toast.makeText(KeyBoardActivity.this, "你点了软键盘'未指定'按钮",
  81.                             Toast.LENGTH_SHORT).show();
  82.                 }
  83.                 return false;
  84.             }
  85.         });
  86.         super.onCreate(savedInstanceState);
  87.     }
  88. }
复制代码


监听软键盘的点击事件
  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. </LinearLayout>
复制代码
5.监听软键盘的按键事件

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

  2. import android.app.Activity;
  3. import android.os.Bundle;
  4. import android.text.Editable;
  5. import android.text.TextWatcher;
  6. import android.widget.EditText;
  7. import android.widget.TextView;

  8. public class MonitorKeyActivity extends Activity {
  9.     @Override
  10.     protected void onCreate(Bundle savedInstanceState) {
  11.         setContentView(R.layout.monitorkey);
  12.         EditText editText = (EditText)findViewById(R.id.monitor_edit_text0);
  13.         final TextView textView0 = (TextView)findViewById(R.id.monitor_text0);
  14.         final TextView textView1 = (TextView)findViewById(R.id.monitor_text1);
  15.         final TextView textView2 = (TextView)findViewById(R.id.monitor_text2);
  16.        
  17.         editText.addTextChangedListener(new TextWatcher() {
  18.             
  19.             @Override
  20.             public void onTextChanged(CharSequence text, int start, int before, int count) {
  21.                 //text  输入框中改变后的字符串信息
  22.                 //start 输入框中改变后的字符串的起始位置
  23.                 //before 输入框中改变前的字符串的位置 默认为0
  24.                 //count 输入框中改变后的一共输入字符串的数量
  25.                 textView1.setText("输入后字符串 [ " + text.toString() + " ] 起始光标 [ " + start + " ] 输入数量 [ " + count+" ]");
  26.                
  27.             }
  28.             
  29.             @Override
  30.             public void beforeTextChanged(CharSequence text, int start, int count,int after) {
  31.                 //text  输入框中改变前的字符串信息
  32.                 //start 输入框中改变前的字符串的起始位置
  33.                 //count 输入框中改变前后的字符串改变数量一般为0
  34.                 //after 输入框中改变后的字符串与起始位置的偏移量
  35.                 System.out.println(text.toString());
  36.                 textView0.setText("输入前字符串 [ " + text.toString() + " ]起始光标 [ " + start + " ]结束偏移量  [" + after + " ]");
  37.             }
  38.             
  39.             @Override
  40.             public void afterTextChanged(Editable edit) {
  41.                 //edit  输入结束呈现在输入框中的信息
  42.                 textView2.setText("输入结束后的内容为 [" + edit.toString()+" ] 即将显示在屏幕上");
  43.             }
  44.         });
  45.        
  46.         super.onCreate(savedInstanceState);
  47.     }
  48. }
复制代码
  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>
复制代码
最后如果你还是觉得我写的不够详细 看的不够爽 不要紧我把源代码的下载地址贴出来 欢迎大家一起讨论学习

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

0

主题

80

帖子

56

安币

程序猿

Rank: 2

QQ
发表于 2011-9-5 14:27:48 | 显示全部楼层
值得学习!

0

主题

72

帖子

69

安币

程序猿

Rank: 2

发表于 2011-9-9 10:07:15 | 显示全部楼层
学习了。呵呵。不错啊

0

主题

160

帖子

114

安币

程序猿

Rank: 2

发表于 2011-9-9 14:54:46 | 显示全部楼层
不错不错,学习了

0

主题

74

帖子

144

安币

程序猿

Rank: 2

发表于 2011-9-12 16:03:48 | 显示全部楼层
真是不错啊,学习学习!

1

主题

25

帖子

12

安币

初级码农

Rank: 1

发表于 2011-9-13 13:22:18 | 显示全部楼层
{:soso_e113:}  收藏了。

0

主题

21

帖子

13

安币

初级码农

Rank: 1

QQ达人

发表于 2011-9-15 12:27:42 | 显示全部楼层
感谢楼主发布,谢谢。

0

主题

32

帖子

3

安币

初级码农

Rank: 1

发表于 2011-9-22 01:07:01 | 显示全部楼层
超值享受!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

领先的中文移动开发者社区
18620764416
7*24全天服务
意见反馈:1294855032@qq.com

扫一扫关注我们

Powered by Discuz! X3.2© 2001-2019 Comsenz Inc.( 粤ICP备15117877号 )