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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 好用的mac录屏软件推荐:白菜录屏mac中文免费版[通俗易懂]

    好用的mac录屏软件推荐:白菜录屏mac中文免费版[通俗易懂]为大家推荐一款好用的mac录屏软件,白菜录屏forMac提供了全屏录制、区域录屏、麦克风录音、后期视频编辑、多格式视频导出、系统声音录制等功能,操作起来十分便捷,而且还是中文免费版,还在找mac录屏软件的朋友可以试试白菜录屏mac版哦!白菜录屏forMac官方介绍白菜录屏是一款小巧却功能强大的mac录屏软件。白菜录屏适用于制作教学视频的博主、录制网课的学生党、记录网络会议或演示的商务人士。白菜录屏formac主要功能全屏录制,区域录屏,支持高帧率,显示摄像头,后期视

    2022年9月24日
    2
  • 关于HeartBleed漏洞的总结「建议收藏」

    关于HeartBleed漏洞的总结「建议收藏」一:前言HeartBleed漏洞又称为心脏出血漏洞,编号(CVE-2014-0160),产生原因:由于未能在memcpy()调用受害用户输入的内容作为长度参数之前正确进行边界检查。攻击者可以追踪OpenSSl所分配的64KB内存,将超出必要范围的字节信息复制到缓存当中,再返回缓存内容,这样一来,受害者的内存内容就会每次泄露64KB.简单来说,这就是OpenSSL缺陷造成的漏洞二:环境…

    2022年7月25日
    16
  • Oracle数据库学习的小结-1

    Oracle数据库学习的小结-1Oracle数据库监听配置 一、监听器(LISTENER)  监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求。既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的设置也是在数据库服务器端完成的。 二、本地服务名(Tnsname)  Oracle客户端与服务器端的连接是通过客户端发出连接请求,由服务器

    2022年9月25日
    5
  • Flashfxpv.3.5.4注册码

    Flashfxpv.3.5.4注册码在安装好任意版本的Flashfxp之后,只要在注册栏中,全盘粘贴一下文字就可以了^_^——–FlashFXPRegistrationDataSTART——–FLASHFXPwQAOlhkgwQAAAAC6W5MNJwTnsl73nIraAU149tnCQS0hmZU3GGBQG1FtoSp5x0mUgA7bFW0qr0fKk2KCA+v2CCrFbF+q

    2022年7月26日
    18
  • mac phpstorm 2021.4.14 激活码_通用破解码

    mac phpstorm 2021.4.14 激活码_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月15日
    59
  • SQL怎么实现模糊查询[通俗易懂]

    SQL怎么实现模糊查询[通俗易懂]模糊查询的语句一般如下:SELECT字段FROM表WHERE某字段LIKE条件;关于条件部分,有以下匹配模式:1.%:表示零个或多个字符。可以匹配任意类型和任意长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示。select*fromuserwhereusernamelike’%张%’;将会把user这张表里面,列名username中含有张的记录全部查询出来。如果需要找到user这张表里面,字段username中既有张,又有李的记录,可以使用and

    2022年5月7日
    125

发表回复

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

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