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 设置输入日期与时间