第五篇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 -> {
            
        });
相关推荐
肖。354878709417 分钟前
[技巧-11]AndroidManifest.xml完善小技巧。
android
小羊子说33 分钟前
Android 车机开发中常用的adb 脚本(更新中)
android·linux·adb·性能优化·车载系统
用户76074953978340 分钟前
Android页面四大布局运行结果
android
风往哪边走42 分钟前
搜索框自定义
android
用户8249281925361 小时前
把android资源类型详解
android
IT观测2 小时前
深度分析俩款主流移动统计工具Appvue和openinstall
android·java·数据库
用户338675581952 小时前
Android 四种常用布局完全解析(附实战项目截图)
android
用户5087532168442 小时前
Android 资源类型全解析:深入理解四种常用布局
android
XiaoLeisj2 小时前
Android 文件存储实战:从应用私有目录读写到网络文件落盘与公共存储接入
android·java·网络·文件操作
恋猫de小郭2 小时前
Android Studio Panda 2 ,支持 AI 用 Vibe Coding 创建项目
android·前端·flutter