`
ice_key
  • 浏览: 17756 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

限制abdroid的EditText输入字符及textChange事件监听

阅读更多

android的EditText 监听Text 的改动, textChange事件监听及对输入字符的限制

 

package org.lyw.android;


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;

/**
 * 限制EditText输入字符
 * 
 * @author liyingwei
 * @2013-2-24 上午1:02:58
 * @AndroidTestActivity.java
 */
public class AndroidTestActivity extends Activity {

    private EditText inputa;
    private EditText inputb;
    private TextView result;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.auto_layout);

        inputa = (EditText) findViewById(R.id.inputa);
        inputb = (EditText) findViewById(R.id.inputb);

        result = (TextView) findViewById(R.id.result);

        inputa.addTextChangedListener(new TextFilter(inputa));
        inputb.addTextChangedListener(new TextFilter(inputb));
    }

    private boolean textFilter(String text) {

        boolean isLegal = false;

        if (null != text && !"".equals(text.trim())) {
            if (text.indexOf(".") > 0) {
                if (text.endsWith(".")) {
                    isLegal = text.matches("^\\d{1,4}\\.$");
                } else {
                    isLegal = text.matches("^\\d{1,4}\\.\\d$");
                }
            } else {
                isLegal = text.matches("^\\d{1,4}$");
            }
        }
        return isLegal;
    }

    class TextFilter implements TextWatcher {

        private EditText editText;

        private String rt;

        public TextFilter(EditText editText) {
            this.editText = editText;
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count,
                int after) {
            Log.w("beforeTextChanged", "-----------------------------------");
            Log.e("beforeTextChanged@ ", " CharSequence: " + s + " -start: "
                    + start + " -count: " + count);
        }

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

            Log.w("onTextChanged", "-----------------------------------");
            Log.e("onTextChanged@ ", "CharSequence: " + s + " -start: " + start
                    + " before: " + before + " -count: " + count);

            String a = inputa.getText().toString();
            String b = inputb.getText().toString();
            if (null != s && !"".equals(s.toString().trim())) {
                String input = s.toString();
                if (textFilter(input)) {
                    if (isEmpty(a) || isEmpty(b)) {
                        result.setText("0.00");
                    } else {
                        double ad = Double.parseDouble(a);
                        double bd = Double.parseDouble(b);
                        result.setText(String.format("%1$.2f", (ad * bd)));
                    }
                } else {
                    editText.setText(input.substring(0, start)
                            + input.substring(start + count));
                    editText.requestFocus();
                    editText.setSelection(start);
                }
            }
            else
            {
                checkResult(a, b);
            }
        }

        @Override
        public void afterTextChanged(Editable s) {
            // editText.setText(rt);
            Log.w("afterTextChanged", "-----------------------------------");
            Log.e("afterTextChanged@ ", s.toString());
        }
        private void checkResult(String a, String b)
        {
            if (!Utils.isEmpty(a) && !Utils.isEmpty(b))
            {
                return;
            }
            String resultStr = trim(a) + trim(b);
            if (isEmpty(resultStr))
            {
                result.setText("");
            }
            else
            {
                result.setText("0.00");
            }
        }

    }

    private boolean isEmpty(String str) {
        return null == str || "".equals(str.trim());

    }
    /**
     * 去空格
     * 
     * @param o trim对象
     * @return trim后的对象
     * @see [类、类#方法、类#成员]
     */
    public static String trim(Object o)
    {
        String str = "";
        if (null != o)
        {
            str = o.toString().trim();
        }
        return str;
    }
} 

 

原创代码,转载请注明出处.

 

分享到:
评论

相关推荐

    Android EditText 正则表达式 限制数字、字母、字符 输入 密码框

    4. **监听输入事件**: - 可以通过监听`TextWatcher`的`beforeTextChanged`, `onTextChanged`, 和 `afterTextChanged`方法,实时检测用户输入是否符合正则表达式,并提供实时反馈。 5. **错误提示**: - 当用户...

    Edittext限制字符数,可以限制最大和最小。

    除了上述方法,还可以通过监听`EditText`的`TextWatcher`事件来实现字符数的限制,但这通常用于实时显示剩余字符数,而不能直接阻止超出范围的输入。例如: ```java editText.addTextChangedListener(new ...

    Android开发之EditText字符串过滤器InputFilter

    然而,有时候我们希望对用户的输入进行限制,比如只允许输入数字、字母或者特定格式的数据,这时我们就需要用到EditText的字符串过滤器——InputFilter。InputFilter是Android SDK提供的一种机制,用于控制EditText...

    Android限制只能输入中文的EditText

    以下是如何实现Android限制只能输入中文的EditText的详细步骤及原理: 1. **EditText基础知识**: EditText是Android中的一个视图组件,它允许用户输入文本。它继承自TextView,提供了更多的交互功能,如文本编辑...

    EditText监听输入完成

    总之,无论是原生Android开发还是PhoneGap混合应用开发,监听`EditText`输入完成都需要结合文本变化监听和特定的用户行为事件。在Android原生开发中,这通常涉及到`TextWatcher`和`OnEditorActionListener`;而在...

    EditText字符大小的限制(40个字符或者20个汉字)

    在Android开发中,`EditText`控件用于接收用户输入的文字,常常需要对用户输入的字符进行限制,以满足特定的功能需求。...通过结合`TextWatcher`和合理的逻辑判断,你可以创建出符合需求的`EditText`输入限制功能。

    android 中如何限制 EditText 最大输入字符数

    Android 中限制 EditText 最大输入字符数的方法 Android 中限制 EditText 最大输入字符数是 Android 开发中常见的问题,本文将详细介绍限制 EditText 最大输入字符数的三种方法。 方法一:在 xml 文件中设置文本...

    Android EditText限制输入字符类型的方法总结

    Android EditText限制输入字符类型的方法总结 前言: 最近的项目上需要限制EditText输入字符的类型,就把可以实现这个功能的方法整理了一下: 1、第一种方式是通过EditText的inputType来实现,可以通过xml或者Java...

    EditText监听粘贴内容

    EditText禁止粘贴内容输入,修改粘贴内容, 参考: 禁止EditText 输入粘贴版内容 http://blog.csdn.net/xiaobijia/article/details/41081595

    Android-AndroidEditText多行文本输入字数统计限制数量

    本篇将深入探讨如何实现`Android EditText`的多行文本输入字数统计及限制功能。 首先,我们需要明白`EditText`的基本用法。它是一个可编辑的文本视图,继承自`TextView`,用户可以在其中输入、修改或删除文本。默认...

    android EditText 限制最大输入字符,是字符不是长度哦

    有时候,我们可能需要对用户输入的字符数量进行限制,比如信用卡号、密码输入等场景,这时就需要设置`EditText`的最大输入字符数。不同于字节长度或字节数,这里的“字符”通常指的是用户肉眼可见的字符,包括英文、...

    android EditText 限制输入的4种方法

    这种方法更加灵活,可以实现复杂的输入限制,如字符数限制、格式验证等。 ```java editText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, ...

    android EditText 限制输入的4种方法【修正版】

    在Android开发中,EditText是用户输入文本的基本组件,它允许用户在界面上输入、编辑文本。有时,我们可能需要对EditText的输入进行限制,比如限制输入的字符长度、类型、格式等,以满足特定的应用场景需求。在...

    android EditText在输入的时候输入框上方现悬浮文字提示

    3. 在代码中操作`EditText`:通过`findViewById()`方法获取`FloatingLabel`对象,并进行设置或监听事件。 除此之外,还可以自定义悬浮文字的颜色、字体大小、动画效果等。这通常通过设置库提供的属性或者直接修改...

    Android EditText限制输入字符的方法总结

    Android EditText限制输入字符的方法总结 最近项目要求限制密码输入的字符类型, 例如不能输入中文。 现在总结一下EditText的各种实现方式, 以比较各种方法的优劣。  第一种方式: 设置EditText的inputType属性...

    EditText限制输入中文或英文字数

    另一种方法是通过自定义`InputFilter`来实现输入限制。`InputFilter`可以过滤输入的字符,我们可以在其中实现字数检查并阻止超出限制的输入: ```java InputFilter filter = new InputFilter() { @Override ...

    Android 监听EditText变化

    在Android开发中,`EditText`是用户输入文本的视图组件,经常用于收集用户的文本信息。为了能够实时响应`EditText`中的文本变化,开发者通常会使用`TextWatcher`监听器。`TextWatcher`是一个接口,提供了三个方法,...

    Android的edittext在弹出框中实现输入自动千分位分隔和金额限制

    在自定义的`EditText`中,我们需要监听用户的输入事件,这可以通过`TextWatcher`来实现。`TextWatcher`提供了`beforeTextChanged`、`onTextChanged`和`afterTextChanged`三个方法,分别在文字变化前、变化中和变化后...

    Edittext限制字符数和限制表情符

    1. 实时检查:可以监听`TextWatcher`事件,当`onTextChanged()`触发时,检查当前字符数,并在超出限制时给出提示。下面是一个简单的例子: ```java editText.addTextChangedListener(new TextWatcher() { @...

    EditText限制输入字符数

    本文将详细介绍如何在Android中实现`EditText`限制输入字符数的功能,并提供相应的代码示例。 首先,我们需要了解`EditText`的基本属性。`android:maxLength` 是一个内置的属性,可以用来设置`EditText`的最大字符...

Global site tag (gtag.js) - Google Analytics