第五篇Android--EditText详解

EditText 字面意思可以编辑的文本。在Android中就是用来接收用户输入的输入框。

1.基本用法

复制代码
   <EditText
        android:id="@+id/id_phone_edit"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:background="@android:color/transparent"
        android:hint="请输入手机号"
        android:inputType="phone"
        android:lines="1"
        android:maxLength="11"
        android:textColor="#FF151F24"
        android:textColorHint="#FFCECECE"
        android:textCursorDrawable="@drawable/edittext_cursor_bg"
        android:textSize="16sp" />

清除系统默认的EditText背景,添加一个透明背景:

android:background="@android:color/transparent"

未输入时的提示文字和颜色:

android:hint="请输入手机号"

android:textColorHint="#FFCECECE"

输入文字的颜色:

android:textColor="#FF151F24"

修改输入光标的颜色和大小:

android:textCursorDrawable="@drawable/edittext_cursor_bg"

通过drawable目录下定义shape的形式,创建一个drawable

复制代码
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="#FFAC36"></solid>
    <size
        android:width="1.8dp"
        android:height="17dp" />
    <corners android:radius="0.9dp" />
</shape>

类型:android:inputType="phone"

phone:呼出的软键盘会自动切换成数字键盘,并且限制输入最大长度11个。

textPassword:文本密码,输入的内容会呈现密码输入的形式。

numberPassword:数字密码,只接受数字类型。

2.代码获取输入的文字:

复制代码
 editText = findViewById(R.id.id_phone_edit);
 String phoneNum = editText.getText().toString().trim();

3.监听EditText文本输入:10086

复制代码
editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after){
                Log.e("nyz","before "+s);
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.e("nyz","change "+s);
            }

            @Override
            public void afterTextChanged(Editable s) {
                Log.e("nyz","after "+s);
            }
        });

打印日志:

通过日志可以看出:每一次输入都会调用三个回调函数。

复制代码
2023-10-12 15:04:24.166 23878-23878/com.example.testview E/nyz: before 
2023-10-12 15:04:24.169 23878-23878/com.example.testview E/nyz: change 1
2023-10-12 15:04:24.169 23878-23878/com.example.testview E/nyz: after 1
2023-10-12 15:04:24.555 23878-23878/com.example.testview E/nyz: before 1
2023-10-12 15:04:24.556 23878-23878/com.example.testview E/nyz: change 10
2023-10-12 15:04:24.556 23878-23878/com.example.testview E/nyz: after 10
2023-10-12 15:04:24.745 23878-23878/com.example.testview E/nyz: before 10
2023-10-12 15:04:24.747 23878-23878/com.example.testview E/nyz: change 100
2023-10-12 15:04:24.748 23878-23878/com.example.testview E/nyz: after 100
2023-10-12 15:04:24.956 23878-23878/com.example.testview E/nyz: before 100
2023-10-12 15:04:24.957 23878-23878/com.example.testview E/nyz: change 1008
2023-10-12 15:04:24.957 23878-23878/com.example.testview E/nyz: after 1008
2023-10-12 15:04:25.374 23878-23878/com.example.testview E/nyz: before 1008
2023-10-12 15:04:25.375 23878-23878/com.example.testview E/nyz: change 10086
2023-10-12 15:04:25.376 23878-23878/com.example.testview E/nyz: after 10086

4.监听软件盘中的回车键:

1)设置回车键的样式 android:imeOptions="",

actionGo:回车键变为"开始"

actionSearch:回车键变为"搜索"

actionDone:默认样式

2)代码中监听回车键:

复制代码
      InputMethodManager manager = (InputMethodManager)         
          getSystemService(Context.INPUT_METHOD_SERVICE);
    
        editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                Log.e("nyz", "actionId "+actionId);
                if (actionId == EditorInfo.IME_ACTION_UNSPECIFIED) {
                    //隐藏软键盘
                    if (manager.isActive()) {
                        manager.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    }
                    return true;
                }
                return false;
            }
        });

通过actionId 可以监听按键的类型:

最常用的还是ActionDone

复制代码
    /**
     * Bits of {@link #IME_MASK_ACTION}: no specific action has been
     * associated with this editor, let the editor come up with its own if
     * it can.
     */
    public static final int IME_ACTION_UNSPECIFIED = 0x00000000;

    /**
     * Bits of {@link #IME_MASK_ACTION}: there is no available action.
     */
    public static final int IME_ACTION_NONE = 0x00000001;

    /**
     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "go"
     * operation to take the user to the target of the text they typed.
     * Typically used, for example, when entering a URL.
     */
    public static final int IME_ACTION_GO = 0x00000002;

    /**
     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "search"
     * operation, taking the user to the results of searching for the text
     * they have typed (in whatever context is appropriate).
     */
    public static final int IME_ACTION_SEARCH = 0x00000003;

    /**
     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "send"
     * operation, delivering the text to its target.  This is typically used
     * when composing a message in IM or SMS where sending is immediate.
     */
    public static final int IME_ACTION_SEND = 0x00000004;

    /**
     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "next"
     * operation, taking the user to the next field that will accept text.
     */
    public static final int IME_ACTION_NEXT = 0x00000005;

    /**
     * Bits of {@link #IME_MASK_ACTION}: the action key performs a "done"
     * operation, typically meaning there is nothing more to input and the
     * IME will be closed.
     */
    public static final int IME_ACTION_DONE = 0x00000006;

5.EditText 设置其他类型的事件监听:

复制代码
       editText.setOnTouchListener((v, event) -> {
            //todo
            return false;
        });
        editText.setOnLongClickListener(v -> {
            //todo
            return false;
        });
        editText.setOnClickListener(v -> {
            
        });
相关推荐
y = xⁿ20 分钟前
MySQL八股知识合集
android·mysql·adb
andr_gale1 小时前
04_rc文件语法规则
android·framework·aosp
祖国的好青年2 小时前
VS Code 搭建 React Native 开发环境(Windows 实战指南)
android·windows·react native·react.js
黄林晴2 小时前
警惕!AGP 9.2 别只改版本号,R8 规则与构建链路全线收紧
android·gradle
小米渣的逆袭3 小时前
Android ADB 完全使用指南
android·adb
儿歌八万首3 小时前
Jetpack Compose Canvas 进阶:结合 animateFloatAsState 让自定义图形动起来
android·动画·compose
zhangphil4 小时前
Android Page 3 Flow读sql数据库媒体文件,Kotlin
android·kotlin
神探小白牙4 小时前
echarts,3d堆叠图
android·3d·echarts
李白的天不白4 小时前
如何项目发布到github上
android·vue.js