Andorid--EditText输入监听事件

在日常开发中,我们经常跟EditText控件打交道,有时候我们的需求可能是这样的,对EditText字数进行统计或者限制。还有另外一种需求可能是这样的,对EditText进行监听,当用户开始输入文本信息的时候,下面那个按钮会变成亮色,或者变成可编辑按钮,这种设计需求越来越多优秀App已经开始有了。但是由于时间关系,这个暂时不讲。具体的话可以参考微信登录界面。所以今天主要讲解Android--EditText输入监听的变化。


一、使用EditText的addTextChangedListener(TextWatcher watcher)方法对EditText实现监听,TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法:


当我们在EditText里面输入文本信息的时候,就会触发TextChangedListener监听事件。从而就会调用TextWatcher里面三个抽象方法。三个方法分别是:输入变化前,输入变化中,输入变化后。这样说大家可能不太懂,没关系,下面写一个案例让大家更好的理解!


二、动手实践篇,为了更好理解,首先先编辑了一个布局文件。

新建:activity.main.xml

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

    <EditText
        android:id="@+id/main_et"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/main_tv"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:text="0" />
    </RelativeLayout>

</LinearLayout>
以上布局没什么的,主要就是一个EditText输入框用来输入监听的,和一个TextView用于来观察输入监听后的改变。


三、实现基本功能,用于监听EditText输入了的文本,让TextView提示已经输入多少个字符。

新建:MainActivity.java

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private EditText main_et;
    private TextView main_tv;

    private final int charMaxNum = 10; // 允许输入的字数
    private CharSequence temp;    // 监听前的文本
    private int editStart;      // 光标开始位置
    private int editEnd;        // 光标结束位置

    private static final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        main_et = (EditText) this.findViewById(R.id.main_et);
        main_tv = (TextView) this.findViewById(R.id.main_tv);
        //设置EditText文本框输入监听事件
        main_et.addTextChangedListener(textWatcher);
    }

    TextWatcher textWatcher = 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) {
            temp = s; //temp = s   用于记录当前正在输入文本的个数

        }

        // 输入文本之后的状态
        @Override
        public void afterTextChanged(Editable s) {
            editStart = main_et.getSelectionStart();
            editEnd = main_et.getSelectionEnd();
            main_tv.setText("" + temp.length());  //把输入temp中记录的字符个数显示在TextView上
            if (temp.length() >10) {
                s.delete(editStart - 1, editEnd);
                int tempSelection = editStart;
                main_et.setText(s);
                main_et.setSelection(tempSelection);
            }
        }
    };


}

解释已在代码中讲过。


最后、附加效果图:


好了,当前我们输入了10个文本信息,并且能够顺利监听完毕!有关EditText输入监听变化本期讲到这,有不懂的朋友欢迎随时交流讨论。



Android Studio中的EditText是一个用于在Android应用中接收用户输入的界面组件。它允许用户在应用中输入文本信息,比如搜索框、用户名输入框、密码输入框等。EditText组件支持各种属性和方法,用于定制和控制用户输入的行为和外观。 在Android布局文件中,通常会在XML中这样声明一个EditText: ```xml <EditText android:id="@+id/editText" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入文本" android:inputType="text" /> ``` 在上面的例子中,定义了一个具有`match_parent`宽度和`wrap_content`高度的EditText,`hint`属性设置了占位符文本,告诉用户在这里输入什么,而`inputType`属性定义了输入的类型(这里是纯文本)。 在Java代码中,可以这样使用EditText: ```java EditText editText = findViewById(R.id.editText); editText.setText("初始文本"); editText.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) { // 输入变化时的处理 } @Override public void afterTextChanged(Editable s) { // 输入变化后的处理 } }); ``` 在上述代码中,通过`findViewById`方法获取了布局文件中定义的EditText实例,并设置了一些基础操作,如设置初始文本和添加文本变化监听器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值