Android Studio新手开发第十一天

目录

编辑框EditText

输入类型与内容控制属性表

功能与交互属性表

inputType属性值大全

1. 基础文本类型

2. 特殊文本格式

3. 数字类型

4. 日期时间类型

焦点变更监听器

文本变化监听器


        之前讲过文本视图TextView来展示文本,但是这些文本都是在预先设置的,如果需要自己输入文本就需要用到另一个控件--编辑框EditText。

编辑框EditText

        编辑框EditText用于接受软键盘输入的文字,它是由文本视图派生而来的。除了原本文本视图所拥有的属性与方法外,编辑框还新增了一些属性,其中较为常用的属性如下文所示。

        1.android:inputType:设置输入文本的类型,若同时使用多种类型可用竖线(|)把多种文本拼接起来。

        2.android:hint:设置提示文本的内容。

        3.android:textColorHint:设置同时文本的颜色。

        4.android:maxLength:设置文本输入的最大长度。

        下表是一些具体的属性介绍表。

输入类型与内容控制属性表

属性作用常用值
android:inputType最重要的属性,指定输入类型,影响键盘布局和输入规则textnumberphonetextPassword
android:hint设置提示文本,用户输入时消失任意字符串
android:text设置初始文本内容任意字符串
android:maxLines设置最大行数数字,如1(单行), 3
android:maxLength设置最大字符数数字,如10140
android:lines固定行数数字
android:digits指定允许输入的字符"0123456789."

功能与交互属性表

属性作用常用值
android:imeOptions设置键盘动作按钮actionDoneactionSearchactionNext
android:focusable是否可获取焦点truefalse
android:selectAllOnFocus获取焦点时全选文本truefalse
android:cursorVisible光标是否可见truefalse
android:enabled是否启用编辑truefalse

下面是代码示例。第一个编辑框设置了maxLines的值为3,输入类型为多行文本,设置了提示文本的内容。第二个编辑框设置了lines的值为3,设置了提示文本及其文本颜色。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".EditTextActivity">

    <EditText
        android:id="@+id/editText_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:maxLines="3"
        android:inputType="textMultiLine"
        android:hint="最多显示三行"
        />

    <EditText
        android:id="@+id/editText_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="top"
        android:hint="固定显示3行"
        android:lines="3"
        android:textColorHint="@color/teal_200"/>

</LinearLayout>

效果图如下,第一张图为输入前,第二张为输入后。第一个编辑框最多显示三行,小于三行时编辑框的高度会随行数变化但最高只有三行的高度,多出的部分可以上下滑动查看。第二个编辑框高度已经固定位三行的高度,不满三行的地方是空白的,超出三行也可以上下滑动查看。这是属性maxLines与lines的区别。

        

        属性inputType的值有多种类型,下表为其值的分类表。

inputType属性值大全

1. 基础文本类型

属性值说明键盘效果
text普通文本全键盘
textCapCharacters所有字母大写全键盘,自动大写
textCapWords每个单词首字母大写全键盘,单词首字母自动大写
textCapSentences每句首字母大写全键盘,句子首字母自动大写
textAutoCorrect启用自动纠正带自动纠正的全键盘
textAutoComplete启用自动完成带自动完成的全键盘
textNoSuggestions禁用输入建议无建议的全键盘
textMultiLine多行文本带换行键的全键盘
textImeMultiLine支持输入法多行输入法支持多行

2. 特殊文本格式

属性值说明键盘效果
textEmailAddress电子邮件地址带 @ 和 . 的全键盘
textUri网址 URI带 / 和 .com 的全键盘
textWebEditText网页表单文本网页优化的全键盘
textPersonName人名人名优化的全键盘
textPostalAddress邮政地址地址输入优化的键盘
textPassword密码(显示圆点)全键盘,输入显示为 •
textVisiblePassword可见密码全键盘,输入可见
textWebPassword网页密码网页密码专用的全键盘
textPhonetic拼音输入拼音输入法优化
textFilter文本过滤搜索过滤优化的键盘
textShortMessage短消息短信优化的键盘
textLongMessage长消息长消息优化的键盘
textEmailSubject邮件主题邮件主题优化的键盘

3. 数字类型

属性值说明键盘效果
number纯数字数字键盘
numberSigned有符号数字带负号的数字键盘
numberDecimal带小数数字带小数点的数字键盘
numberPassword数字密码数字键盘,输入显示为 •
phone电话号码电话拨号键盘

4. 日期时间类型

属性值说明键盘效果
date日期日期输入优化的键盘
time时间时间输入优化的键盘
datetime日期时间日期时间输入优化的键盘

焦点变更监听器

        编辑框是有点击事件的意味着有对应的监听器,但发现需要点击两次才会触发点击事件。这是因为第一次点击会触发焦点点击事件即编辑框会出现闪动的光标。对于编辑框来说,应当注册焦点变更监听器而不是点击监听器。总不能每次都要点击两次才触发点击事件吧。焦点变更监听器来自接口View.OnFocusChangeListener,注册方法是setOnFocusChangeListener。下面是代码示例。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".EditTextActivity">

    <EditText
        android:id="@+id/editText_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="number"
        android:maxLength="11"
        android:hint="请输入11为号码"
        />

    <EditText
        android:id="@+id/editText_2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="text"
        android:hint="请输入验证码" />

</LinearLayout>
//部分Java代码 
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_text);
        EditText editText_1,editText_2;
        editText_1 = findViewById(R.id.editText_1);
        editText_2 = findViewById(R.id.editText_2);
        editText_2.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            @Override
            public void onFocusChange(View view, boolean b) {
                String str = editText_1.getText().toString();
                if(str.length() < 11 || TextUtils.isEmpty(str)){
                    editText_1.requestFocus();
                }
            }
        });
    }

效果图如下,当第一个编辑框文本长度不足11 时点击第二个编辑框会触发焦点变更将焦点移至第一个编辑框。

文本变化监听器

        文本变化监听器用于监听编辑框中输入的文本变化,包括添加与删除文本时会触发监听器。使用文本变化监听器需要实现接口TextWatcher,带接口有三个监控方法:beforeTextChanged在文本改变前触发;onTextChanged在文本改变过程中触发;afterTextChanged在文本改变后触发,比较常用的监控方法是最后一个。注册监听器需要调用编辑框的方法addTextChangedListener。下面为代码示例。xml代码与上面类似。Java代码中的监听器主要是监听第一个编辑框的文本变化然后将文本内容同步到第二个编辑框上。

//部分Java代码
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_edit_text);
        EditText editText_1,editText_2;
        editText_1 = findViewById(R.id.editText_1);
        editText_2 = findViewById(R.id.editText_2);
        editText_1.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {}

            @Override
            public void afterTextChanged(Editable editable) { editText_2.setText(editable.toString()); }
        });
    }

效果图如下。两个编辑框的文本一致。除了这种用法,也可以当第一个编辑框文本长度达到11时变更焦点到第二个编辑框或者关闭输入法等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值