首页 > 技术文章 > Android开发笔记(五)——EditText

yangdd 原文

EditText也是TextView的一个子类,TextView和Button的一些属性在EditText中也同样适用。

TextView是显示文字的一个控件,但是不可以编辑,EditText是可以输入的控件。

activity_main.xml 中添加一个Button:

<Button
    android:id="@+id/btn_edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="EditText"
    android:textAllCaps="false"
    />

Button中的英文字母会自动进行大写转换, android:textAllCaps="false" 可以取消这个默认。
接下来在 MainActivity.java 中声明这个控件:

private Button mBtnEditText;

添加一个新的activity名称叫 EditTextActivity ,此时 AndroidMainfest.xml 中会自动添加如下声明:

<activity android:name=".EditTextActivity"></activity>

如果没有添加则要自己手动添加,否则会跳转失败。
之后要在 MainActivity.java 中的 onCreate 函数中使用 findViewById 找到该button,接着设置一个点击事件,使其点击之后跳转到新的界面:

mBtnEditText=findViewById(R.id.btn_edittext);
mBtnEditText.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        //跳转到EditText的演示界面
        Intent intent=new Intent(MainActivity.this,EditTextActivity.class);
        startActivity(intent);
    }
});

常用属性

hint => 文本框内提示
textColorHint => 设置hint提示文字颜色
inputType =>
  "none"//输入普通字符
  "text"//输入普通字符
  "textCapCharacters"//输入普通字符
  "textCapWords"//单词首字母大小
  textCapSentences"//仅第一个字母大小
  "textAutoCorrect"//前两个自动完成
  "textAutoComplete"//前两个自动完成
  "textMultiLine"//多行输入
  "textImeMultiLine"//输入法多行(不一定支持)
  "textNoSuggestions"//不提示
  "textUri"//URI格式
  "textEmailAddress"//电子邮件地址格式
  "textEmailSubject"//邮件主题格式
  "textShortMessage"//短消息格式
  "textLongMessage"//长消息格式
  "textPersonName"//人名格式
  "textPostalAddress"//邮政格式
  "textPassword"//密码格式
  "textVisiblePassword"//密码可见格式
  "textWebEditText"//作为网页表单的文本格式
  "textFilter"//文本筛选格式
  "textPhonetic"//拼音输入格式
  "number"//数字格式
  "numberSigned"//有符号数字格式
  "numberDecimal"//可以带小数点的浮点格式
  "phone"//拨号键盘
  "datetime"//日期+时间格式
  "date"//日期键盘
  "time"//时间键盘
drawableLeft => 编辑框内左侧绘制图片资源,= Start | 也有Top Bottom Right
drawablePadding => 图片padding
lines => 占几行(显示上)
digits => 设置只接收指定的文本内容
textAlignment => center(居中),inherit(默认,居左边显示),viewStart(居左显示),viewEnd(居右显示),textStart(居左显示),textEnd(居右显示).
extCursorDrawable => 光标颜色
android:textScaleX => 文本水平缩放系数.
android:typeface => hint字体
maxLength => 最多接收文本长度
maxHeight => 文本区域最大高度
minHeight => 文本区域最小高度
scrollHorizontally => 文本超出,是否出现横拉条
ellipsize => 文字过长时,如何显示
  "start”开头省略
  ”end”结尾省略
  ”middle”中间省略
  ”marquee” 跑马灯

简单登录界面的制作

activity_edit_text.xml 中添加 EditTextButton 控件,具体属性设置如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    >

    <EditText
        android:id="@+id/et_1"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:textSize="20sp"
        android:textColor="#000000"
        android:hint="手机号"
        android:inputType="number"
        android:background="@drawable/bg_username"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:drawableLeft="@drawable/icon_user"
        android:drawablePadding="10dp"
        android:maxLines="1"
        android:layout_marginTop="50dp"
        />

    <EditText
        android:id="@+id/et_2"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:textSize="20sp"
        android:textColor="#000000"
        android:hint="密码"
        android:inputType="textPassword"
        android:layout_below="@id/et_1"
        android:layout_marginTop="15dp"
        android:background="@drawable/bg_username"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:drawableLeft="@drawable/icon_password"
        android:drawablePadding="10dp"
        android:maxLines="1"
        />

    <Button
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_below="@id/et_2"
        android:layout_marginTop="40dp"
        android:text="登录"
        android:textColor="#000000"
        android:textSize="20sp"
        android:background="@drawable/bg_btn4"
        />

</RelativeLayout>

接下来在 EditTextActivity.java 中声明登录的 Button 控件:

private Button mBtnLogin;

之后要在 EditTextActivity.java 中的 onCreate 函数中使用 findViewById 找到该button,接着设置一个点击事件,使其点击之后显示登录成功的字样:

mBtnLogin=findViewById(R.id.btn_login);
mBtnLogin.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Toast.makeText(EditTextActivity.this,"登录成功!",Toast.LENGTH_SHORT).show();
    }
});

具体效果如下:这里输入密码的时候手机录屏录不到o(╥﹏╥)o

监听事件

对输入内容变化的监听:
这里对输入的手机号进行监听:
EditTextActivity.java 中声明输入框的 EditText 控件:

private EditText mEtUsername;

之后要在 EditTextActivity.java 中的 onCreate 函数中使用 findViewById 找到该button,接着设置一个监听事件,实现可以监听输入内容,具体实现如下:

mEtUsername=findViewById(R.id.et_1);
mEtUsername.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        Log.d("edittext",s.toString());
    }

    @Override
    public void afterTextChanged(Editable s) {

    }
});

CharSequence s 就是当前输入框的内容。

具体效果如下:

可以看到,每当输入一个内容就可以打印出来,这就实现的对输入内容的监听。

推荐阅读