Android控件系列之EditText

学习目的:

1、掌握在Android中如何建立EditText

2、掌握EditText的常用属性

3、掌握EditText焦点的事件、按键的事件(监听器)

介绍:

EditText是接受用户输入信息的最重要控件。通过前面课程的学习,您可能会猜到可以利用EditText.getText()获取它的文本,但真正的项目中,可能没那么简单,需要更多的限制,如文本长度限制,是否数字限制等等。

鉴于手机屏幕尺寸有限,您可能总想着如何节约控件。在每个用户需要填写内容的文本框的左边加上标题在PC上是一种优雅的方法,但在手机上就会显的浪费,因此本例我们将学习如何利用一个EditText达到所有的效果:

Android控件系列之EditText_第1张图片

 请注意第一个文本框,其他控件只是为了测试转移焦点后的效果,我们样例针对第一个文本进行限制,用户没有输入时,它显示“请输入您的名字”作为提示,为了区分这只是一个提示而不是真正的文本,我们使用灰色来以示区分,当用户输入自己的内容时,这个提示将会消失,而字体变为黑色,如下图:

Android控件系列之EditText_第2张图片

最后我们对EditText做了长度限制,这可以简单的在XML中将它的maxLength属性设定为一个值,但用户输入不了更多字符时,会产生歧义,因此需要告知用户无法继续输入的原因:

  Android控件系列之EditText_第3张图片

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:layout_width ="fill_parent"
9 android:layout_height ="wrap_content"
10 android:textColor ="#DDDDDD"
11 android:text ="请输入您的名字"
12 android:id ="@+id/et"
13 android:maxLength = "10"
14
15 ></ EditText >
16 < Button
17 android:layout_width ="fill_parent"
18 android:layout_height ="wrap_content"
19 android:text ="点击转换焦点"
20 ></ Button >
21 < EditText
22 android:layout_width ="fill_parent"
23 android:layout_height ="wrap_content"
24
25 android:text ="点击转换焦点"
26 android:id ="@+id/et2"
27 ></ EditText >
28 </ LinearLayout >

后台代码如下:

   
   
1 // 表示文本框是否为空
2 private Boolean isEmpty = true ;
3
4 /** Called when the activity is first created. */
5 @Override
6 public void onCreate(Bundle savedInstanceState) {
7 super .onCreate(savedInstanceState);
8 setContentView(R.layout.main);
9
10 EditText et = (EditText) this .findViewById(R.id.et);
11 // 监听控件的焦点改变事件
12 et.setOnFocusChangeListener( new OnFocusChangeListener() {
13
14 @Override
15 public void onFocusChange(View arg0, boolean arg1) {
16 // TODO Auto-generated method stub
17 // 获取触发事件的EditText
18 EditText clickEditText = (EditText)arg0;
19
20 // 如果失去焦点
21 if (arg1 == false )
22 {
23 // 获取当前文本
24 String text = clickEditText.getText().toString().trim();
25 // 如果的确人为输入过内容
26 if (text.length() > 0
27 & text.equals( " 请输入您的名字 " ) == false )
28 {
29 isEmpty = false ;
30 clickEditText.setTextColor(Color.BLACK);
31 clickEditText.setText(text);
32 }
33 else
34 {
35 clickEditText.setText( " 请输入您的名字 " );
36 clickEditText.setTextColor(Color.GRAY);
37 isEmpty = true ;
38 }
39 }
40 // 如果获得焦点
41 else
42 {
43 clickEditText.setTextColor(Color.BLACK);
44 // 如果处于未编辑状态,则清空“请输入您的名字”这几个字
45 if (isEmpty == true )
46 {
47 clickEditText.setText( "" );
48 }
49 }
50 }
51 });
52
53 // 监听控件有新字符输入
54 et.setOnKeyListener( new OnKeyListener() {
55
56 @Override
57 public boolean onKey(View arg0, int arg1, KeyEvent arg2) {
58 // TODO Auto-generated method stub
59 // 获取触发事件的EditText
60 EditText clickEditText = (EditText)arg0;
61 // 获取当前文本
62 String text = clickEditText.getText().toString().trim();
63
64
65 if (text.length() == 10 )
66 {
67 // 提示用户
68 Toast toast = Toast.makeText(MyActivity. this , " 最大长度为10个字符 " , Toast.LENGTH_SHORT);
69 toast.setGravity( 0 , 0 , 0 );
70 toast.show();
71 }
72 return false ;
73 }
74 });
75
76 }

总结:

本文介绍了如何在Android中使用EditText,并介绍了常用的属性和事件,最后实现了一个用户体验良好的,并且非常通用的文本限制和提示功能。

 

你可能感兴趣的:(android控件)