7.3 文本框
Android中的文本框控件是EditText,用来收集输入文本信息与展示文本信息。默认情况下,文本框样式如图7-9中的Email address控件所示。注意,它只有下边框。
图7-9 EditText默认样式
EditText的对应类是android.widget.EditText,类图如图7-10所示,从图中可见android.widget.EditText继承了android.widget.TextView。
图7-10 EditText类图
7.3.1 文本框相关属性
EditText有很多属性,以下是文本框特有属性:
❏ android:maxLines。设置显示最大行数。
❏ android:minLines。设置至少显示行数。
❏ android:inputType。设置输入类型,目前有32种不同类型可以输入。例如,textPassword控制输入的内容密码显示;phone控制弹出的键盘电话拨号键盘。
❏ android:hint。文本框中的提示文本,当文本框没有输入任何内容的时候,该属性设置的内容呈现浅灰色显示。
❏ android:textColorHint。设置提示文本的显示颜色,默认值是浅灰色。
❏ android:singleLine。设置是否单行输入。默认情况下文本框是可以输入多行的,通过设置该属性为true,使文本框只能单行输入。
❏ android:background。设置文本框背景。
7.3.2 实例1:用户登录
图7-11是用户登录实例,屏幕中有两个文本框和一个登录按钮,第一个文本框是用户名,第二个文本框是密码输入框架。
图7-11 用户登录实例
布局文件activity_main.xml的代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:id="@+id/username" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" ① android:hint="请输入用户名"/> ② <EditText android:id="@+id/pwd" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background" ③ android:hint="请输入密码" ④ android:inputType="textPassword"/> ⑤ <Button android:id="@+id/login_button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/button"/> </LinearLayout>
上述代码第①行和第③行是设置android:background属性,其中取值"@android:drawable/editbox_background"是Android框架提供的editbox_background.xml,设置该属性之后,文本框周围有边框,并且当文本框获得焦点时边框会显示为黄色,如图7-11所示。
代码第②行和第④行设置android:hint属性,图7-11是显示淡灰色提示信息。代码第⑤行android:inputType="textPassword"是设置控制输入的内容密码显示。
MainActivity.java代码如下:
public class MainActivity extends AppCompatActivity{ @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final EditText edittext =(EditText) findViewById(R.id.username); ① Button button=(Button) findViewById(R.id.login_button); button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v){ edittext.setText("你好我是EditText! "); ② } }); } }
上述代码第①行是通过findViewById(R.id.username)方法查找EditText对象。
在程序代码中,可以使用setText(CharSequence)方法设置EditText值,用getText()方法来获得EditText的值,返回值是android.text.Editable接口类型,Editable继承CharSequence接口。
提示 android.text.Editable是Android提供的,与String没有任何关系,可通过toString()实现Editable转换为String。示例代码如下:
Editable newTxt=(Editable) edittext.getText(); String newString = newTxt.toString();
7.3.3 实例2:文本框输入控制
EditText控件还有很多输入控制属性,下面通过如图7-12所示的实例介绍输入控制的相关属性。
图7-12 文本框输入控制实例
布局文件activity_main.xml代码中“最大行数3”EditText相关代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="最大行数3" android:maxLines="3"/> ① … </LinearLayout>
上述代码第①行android:maxLines="3"是设置显示3行文本,如图7-13所示,虽然输入多行文本,但是只是显示3行文本。
图7-13 设置显示3行文本
布局文件activity_main.xml代码中输入数字的EditText相关代码如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> … <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入数字" ① android:inputType="number" android:singleLine="true"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入带小数点的浮点格式" android:inputType="numberDecimal" ② android:singleLine="true"/> … </LinearLayout>
代码第①行android:inputType="number"是设置输入数字,弹出数字键盘(见图7-14),虽然键盘上有小数点和负数但不能输入,只能输入数字。代码第②行android:inputType="numberDecimal"是设置输入带小数点的浮点,弹出android:inputType="number"一样的数字键盘(见图7-14)。
图7-14 设置输入数字
布局文件activity_main.xml代码中输入日期时间的EditText相关代码如下:
<?xml version="1.0" encoding="utf-8"?> >LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> … >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入日期时间" android:inputType="datetime" ① android:singleLine="true"/> >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入日期" android:inputType="date" ② android:singleLine="true"/> >EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="输入时间" android:inputType="time" ③ android:singleLine="true"/> … >/LinearLayout>
代码第①行android:inputType="datetime"是设置输入日期与时间,弹出日期与时间键盘(见图7-15(a))。代码第②行android:inputType="date"是设置输入日期,弹出日期键盘(见图7-15(b))。代码第③行android:inputType="time"是设置输入时间,弹出时间键盘(见图7-15(c))。从图7-15可见日期时间、日期和时间键盘差别只在于左下脚键不同。
图7-15 设置输入日期与时间