第五篇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 -> {
            
        });
相关推荐
雨白2 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹4 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空6 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭6 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日7 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安7 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑7 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟11 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡13 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0013 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体