1. 程式人生 > >Android 對EditText進行攔截操作

Android 對EditText進行攔截操作

輸入修改姓名時候,只能輸入漢字,字母,數字,並且最長只能輸入16個字元,數字字母算一個字元,漢字算兩個字元

重寫EditText對單次輸入的內容進行攔截判斷

public class LimitEditText extends EditText  {

    public LimitEditText(Context context) {
        super(context);
    }

    public LimitEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
//        this.addTextChangedListener(this);
    }

    /**
     * 輸入法
     * @param outAttrs
     * @return
     */
    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        return new mInputConnecttion(super.onCreateInputConnection(outAttrs),
                false);
    }







    private int count;
    class mInputConnecttion extends InputConnectionWrapper implements
            InputConnection {

        public mInputConnecttion(InputConnection target, boolean mutable) {
            super(target, mutable);
        }


        /**
         * 對輸入的內容進行攔截
         *
         * @param text
         * @param newCursorPosition
         * @return
         */
        @Override
        public boolean commitText(CharSequence text, int newCursorPosition) {
            // 只能輸入漢字

            if (!text.toString().matches("[\u4e00-\u9fa5]+") && !text.toString().matches("[a-zA-Z]+")&&!text.toString().matches("[0-9]")) {
                ToastUtil.ToastShow(getContext(),"只能輸入數字和字母和漢字");
                return false;
            }


           tips(text.toString());

           if(count>16){
               ToastUtil.ToastShow(getContext(),"最多16個字元");
               return  false;
           }

            return super.commitText(text, newCursorPosition);
        }

        private void tips (String append){
            count=0;

            String text=getText().toString();
            for (int i=0;i<text.length();i++){
                String a=String.valueOf(text.charAt(i));
                if(a.matches("[\u4e00-\u9fa5]+")){
                    count=count+2;
                }
                else{
                    count=count+1;
                }
            }



            for (int i=0;i<append.length();i++){
                String a=String.valueOf(append.charAt(i));
                if(a.matches("[\u4e00-\u9fa5]+")){
                    count=count+2;
                }
                else{
                    count=count+1;
                }
            }


        }


        @Override
        public boolean sendKeyEvent(KeyEvent event) {
            return super.sendKeyEvent(event);
        }

        @Override
        public boolean setSelection(int start, int end) {

            return super.setSelection(start, end);
        }

    }


}

提交時候正則判斷,只能有數字字母漢字

    public boolean intputName(String name) {
        Pattern compile = Pattern.compile("[a-zA-Z0-9\u4e00-\u9fa5]*");
        Matcher matcher = compile.matcher(name);
        if (matcher.matches()) {
            return true;
        } else {
            return false;
        }
    }

奇葩需求天天有

相關推薦

Android EditText進行攔截操作

輸入修改姓名時候,只能輸入漢字,字母,數字,並且最長只能輸入16個字元,數字字母算一個字元,漢字算兩個字元 重寫EditText對單次輸入的內容進行攔截判斷 public class LimitEditText extends EditText {

mono for android中使用dapper或petapocosqlite進行資料操作

在mono for android中使用dapper或petapoco,很簡單,新建android 類庫專案,直接把原來的檔案複製過來,對Connection連線報錯部分進行註釋和修改就可以運行了.(用可移植類庫PCL專案也可以的.) 如果需要原始碼可以聯絡我.10元收費哈.. 以下內容包括 1.在安卓中建

Struts2 攔截器中實現資料進行資料庫操作

功能需求說明:         用攔截器的方式,攔截以.action結尾的類,同時記錄訪問的action名稱、action的包路徑、action後面帶的引數、操作者的ID、操作者的姓名、等其他資料。 吐槽點: 1.

Android圖片進行平移,縮放,旋轉操作

package com.app.freestyle; import java.util.Arrays; import java.util.Collections; import java.util.List; import com.app.freestyle.R; i

AndroidView進行全域性攔截處理

前言 當我們繼承AppCompatActivity時,會發現一些系統控制元件會被替換成v4包擴充套件過後的View,它是如何做到全域性攔截替換的呢,有時候我們也有一些需求,需要對某一型別的View進行統一操作。 LayoutInflater 原始碼分析

關於java中需要路徑進行分割操作時出現的異常

在工作中操作分割路徑時出現的問題 示例:String path = "C:\\Users\\Administrator.SC-201606041031\\Desktop\\test.txt"; 需要對該path進行分割操作則需要 String[] matchPaths = path.split

vue專案中傳送請求獲取到的資料渲染到介面之後無法進行DOM操作的問題

vue.js通常鼓勵開發人員沿著“資料驅動”的方式思考,避免直接接觸DOM。this.$nextTick()將回調延遲到下次DOM更新迴圈之後執行。在修改資料之後立即使用它,然後等待DOM更新。它跟全域性方法vue.nextTick一樣,不同的是回撥的this自動繫結到呼叫它的例項上。 &nbs

資料庫進行插入操作

提交.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head&

javaweb:JDBC連線MYSQL資料庫詳解,使用JDBC資料庫進行CRUD操作以及DAO模式的介紹

  JDBC簡介: JDBC全稱為:Java DataBase Connectivity(java資料庫連線)。 SUN公司為了簡化、統一對資料庫的操作,定義了一套Java操作資料庫的規範,稱之為JDBC。 組成JDBC的2個包: 連結:https://pan

C#中無法access進行Update操作

為何64位的.NET程式不能申請超過2G的空間c#winform文字框字元延時隱藏為何64位的.NET程式不能申請超過2G的空間c#winform文字框字元延時隱藏 C#如何解決修改登錄檔受限問題關於用C#解析Excel的疑問C#如何解決修改登錄檔受限問題關於用C#解析Exc

使用 aspectj spark 進行攔截

文章目錄 背景 如何使用 程式碼 配置 結語 背景 開源產品要想用的得心應手免不了要根據公司的業務/場景對其做一些改造,如果直接在原始碼的層面對其修改,當下可能用的很省心,但後期與社群程式碼的

C#利用NPOIExcel進行基本操作

C#利用NPOI操作Excel詳解 一、 下載npoi控制元件,並進行引用。 1.下載地址: 2.引用npoi (1)、下載後的npoi包括5個dll檔案: (2)、下載完成之後首先建立一個控制檯程式,然後在視圖裡面,調出解決方案資源管理器,點選“引用”>

springboot 自定義interceptor 請求進行攔截

自定義interceptor package com.zhk.demo.interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web

【pyTorch】torch下的網路如何文字進行embedding操作

torch下的網路對文字進行embedding操作的程式碼示例如下: from torch import nn import torch from torch.nn import functional as F class TextNet(nn.Module):

通過Curl url進行encode操作

最近做專案的時候,通過 Gflags Reload 時候 發現對於某些value中包含=%中文等字元的支援不夠好,value被截斷了。 經過分析後,發現程式對url切分是用=&為標準的,如果value中帶有這樣的特殊字元,必然導致截斷。 解決的方法也很簡單,框架預設對value進行進行了urlde

js日期進行格式化操作

    JX_data(data) { //日期格式化過濾器 Date.prototype.format = function (fmt) { //author: meizz var o = { 'M+':

POIExcel進行讀取操作,工具類,便於操作資料

一:首先POI對Excel 操作進行了一系列的封裝,匯入,匯出Excel這裡藉助於POI提供的jar包 專案當中匯入POI提供的Jar包,這裡使用Maven管理   進行匯入jar包   <!-- https://mvnrepository.c

字串進行壓縮操作

a = 'abbccccddcccc' list1 = list(a) stra ="" flag = 0 q = 0 while 1:     if flag == len(a):         break     for i in range(flag,

OpenCV影象進行mask操作

這裡的mask操作指的是,對一幅影象image,有一個binary的mask影象,image_masked = image & mask 可以採用 Mat的copyTo成員函式,利用mask引數實現。 #include <opencv2/core/core.h