Andorid--EditText输入监听事件

来源:互联网 发布:网络教育英语难不难 编辑:程序博客网 时间:2024/06/05 17:16

在日常开发中,我们经常跟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输入监听变化本期讲到这,有不懂的朋友欢迎随时交流讨论。



原创粉丝点击