TextWatcher学习[通俗易懂]

xmlversion=”1.0″encoding=”utf-8″?>LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”android:orientation=”vertical”android:layout_width=”fill_parent”android:layout_heig

大家好,又见面了,我是你们的朋友全栈君。<?
xml version=”1.0″ encoding=”utf-8″
?>


<
LinearLayout
 
xmlns:android
=”http://schemas.android.com/apk/res/android”

android:orientation

=”vertical”

android:layout_width

=”fill_parent”

android:layout_height

=”fill_parent”



>


<
TextView
 
android:id
=”@+id/tv”

android:layout_width

=”fill_parent”
 

android:layout_height

=”wrap_content”
 

android:textColor

=”@android:color/white”
 

android:ellipsize

=”marquee”
 

android:focusable

=”true”
 

android:marqueeRepeatLimit

=”marquee_forever”
 

android:focusableInTouchMode

=”true”
 

android:scrollHorizontally

=”true”
 

android:text

=”Please input the text:”



/>


<
EditText
 
android:id
=”@+id/ET”
 

android:layout_width

=”match_parent”
 

android:layout_height

=”wrap_content”

android:inputType

=”number”
/>


</
LinearLayout
>

Java代码:
package com.android.text;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class TextWatcherDemo extends Activity {

    private TextView mTextView;
    private EditText mEditText;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mTextView = (TextView)findViewById(R.id.tv);
        mEditText = (EditText)findViewById(R.id.ET);
        mEditText.addTextChangedListener(mTextWatcher);
    }
    TextWatcher mTextWatcher = new TextWatcher() {

        private CharSequence temp;
        private int editStart ;
        private int editEnd ;
        @Override
        public void beforeTextChanged(CharSequence s, int arg1, int arg2,
                int arg3) {

            temp = s;
        }
      
        @Override
        public void onTextChanged(CharSequence s, int arg1, int arg2,
                int arg3) {

            mTextView.setText(s);
        }
      
        @Override
        public void afterTextChanged(Editable s) {

            editStart = mEditText.getSelectionStart();
            editEnd = mEditText.getSelectionEnd();
            if (temp.length() > 10) {

                Toast.makeText(TextWatcherDemo.this,
                        “你输入的字数已经超过了限制!”, Toast.LENGTH_SHORT)
                        .show();
                s.delete(editStart-1, editEnd);
                int tempSelection = editStart;
                mEditText.setText(s);
                mEditText.setSelection(tempSelection);
            }
        }
    };
}
(2)使用

TextWathcer实现EditeText和TextView同步


TextWatcher自身是一个接口,首先需要实现这个接口并覆盖其三个方法,分别为Text改变之前,改变之后以及改变的过程中各自发生的动作相应,这里我们只需要实现EditText在文本发生改变时候让TextView的内容跟着发生变化。

editText.addTextChangedListener(new TextWatcher(){

@Override  
public void afterTextChanged(Editable s) {  
    }  
@Override  
public void beforeTextChanged(CharSequence s,int start,int count,int after){      
    }  
@Override  
public void onTextChanged(CharSequence s, int start, int before, int count) {  
   textView.setText(editText.getText());  
  }  
}); 

可以看出TextWatcher是专门用来监听文本变化的,正因为它的这个技能,正是我们实现同步的功能所需要的











Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入 一些非法字符等,这些需求有些可以使用android控件属性直接写在布局xml文件里,比如android:numeric=”integer”(只允 许输入数字);

     对于一些需求,如非法字符限制(例如不允许输入#号,如果输入了#给出错误提示),做成动态判断更方便一些,而且容易扩展;

     在Android里使用TextWatcher接口可以很方便的对EditText进行监听;TextWatcher中有3个函数需要重载:

public void beforeTextChanged(CharSequence s, int start, int count, int after); public void onTextChanged(CharSequence s, int start, int before, int count); public void afterTextChanged(Editable s);

     从函数名就可以知道其意思,每当敲击键盘编辑框的文字改变时,上面的三个函数都会执行,beforeTextChanged可以给出变化之前的内容,onTextChanged和afterTextChanged给出追加上新的字符之后的文本;

所以对字符的限制判断可以在afterTextChanged函数中进行,如果检查到新追加的字符为认定的非法字符,则在这里将其delete掉,那么他就不会显示在编辑框里了:

private final TextWatcher mTextWatcher = new TextWatcher() { 

public void beforeTextChanged(CharSequence s, int start, int count, int after) { } 

public void onTextChanged(CharSequence s, int start, int before, int count) { } 

public void afterTextChanged(Editable s) {

 if (s.length() > 0) { int pos = s.length() – 1; char c = s.charAt(pos); if (c == ‘#’) {//这里限制在字串最后追加# s.delete(pos,pos+1); Toast.makeText(MyActivity.this, “Error letter.”,Toast.LENGTH_SHORT).show(); }

 } }};

     注册监听:

EditText mEditor = (EditText)findViewById(R.id.editor_input); 

mEditor.addTextChangedListener(mTextWatcher);


转载地址:http://czhjchina.blog.163.com/blog/static/2002790472012220113455325/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/125623.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Kong 源码分析

    Kong 源码分析本文最初于2020年9月在公司内部发表,现整理并增加部分批注公开发布。最开始加入公司Infrastructure团队时,迷茫的我接到的的一个任务就是学习Lua和OpenResty,当时收到了两本书籍的PDF文件,要求尽快理解学习,能够掌握Kong,并且具有研发能力。当时我还没有怎么接触开源社区,能力只停留在GitClone,大概花了2周时间,我学习Lua基本语法后,开始阅读Kong项目的源码,并找到几个切入点梳理了源码分析文档,也应该正是这个成果让组长认同了我,这

    2022年6月26日
    20
  • 不可错过的手机APP常见8种界面导航样式

    不可错过的手机APP常见8种界面导航样式

    2022年2月1日
    40
  • gif录屏与gif图片合成工具「建议收藏」

    gif录屏与gif图片合成工具「建议收藏」现在好多gif图片合成是收费的,而且可能还不太好用,这里分析的gif合成软件是个比较老的软件,但是用着还是挺好用的。还有一个录屏软件,录制保存为gif文件。百度网盘分享,无需积分:链接:https://pan.baidu.com/s/1HukTW6yJvqoUiqbzXuY5bQ提取码:pvc4欢迎关注微信公众号,分享更多实用工具:…

    2022年9月15日
    0
  • NetworkManager 使用「建议收藏」

    NetworkManager 使用「建议收藏」NetworkManagerNetworkManageraimsforNetworkConnectivitywhich”JustWorks”.Thecomputershouldusethewirednetworkconnectionwhenit’spluggedin,butautomaticallyswitchtoawirelessc

    2022年10月5日
    0
  • Linux软连接

    Linux软连接

    2021年10月27日
    42
  • 极限编程简述_极限编程的优缺点

    极限编程简述_极限编程的优缺点在敏捷方法中,极限编程(XP:eXtremeProgramming)是其中最著名的一个,它由一系列简单却互相依赖的实践组成。。。本篇博客,对极限编程做一个简述,以及个人的一些理解,主要从以下几点进

    2022年8月6日
    16

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号