1. 程式人生 > >Android EditText限制文字長度(中文算2字元,英文算1字元)

Android EditText限制文字長度(中文算2字元,英文算1字元)

其實專案原本使用cocos2dx中的CCEditBox,使用editBox:setMaxLength(10),想要限制輸入長度,但是這裡實際使用的是如下圖:


這裡LengthFilter不會區分中英文,一律當做1個字元,而專案實際想要的是中文算2個字元,英文算做1個字元這樣處理,因此就需要修改一下這個Filter。

上個demo吧,這裡直接建立一個android的工程,在activity_main.xml中新增以下程式碼,自己去new出EditText也可以


然後在MainActivity.java中新增如下程式碼:

final int maxLen = 10;
InputFilter filter = new InputFilter() {

    @Override
    public CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend) {
        int dindex = 0;
        int count = 0;
        
        while (count <= maxLen && dindex < dest.length()) {
            char c = dest.charAt(dindex++);
            if (c < 128) {
                count = count + 1;
            } else {
                count = count + 2;
            }
        }
        
        if (count > maxLen) {
            return dest.subSequence(0, dindex - 1);
        }
        
        int sindex = 0;
        while (count <= maxLen && sindex < src.length()) {
            char c = src.charAt(sindex++);
            if (c < 128) {
                count = count + 1;
            } else {
                count = count + 2;
            }
        }
        
        if (count > maxLen) {
            sindex--;
        }
        
        return src.subSequence(0, sindex);
    }
};

EditText editText=(EditText)findViewById(R.id.edit_text);
editText.setFilters(new InputFilter[]{filter});
這裡實際上就是判斷一下,英文ascii碼值都是128以下,這裡只要通過這個區分,來做個限制即可。

比較蛋疼的是

CharSequence filter(CharSequence src, int start, int end, Spanned dest, int dstart, int dend)

這個介面的引數,一開始混淆了好久

src是當前輸入的文字,start和end我壓根就沒用到,就是輸入字元的起始和終止長度

dest是當前已經顯示的文字,dstart和dend含義一樣,我也沒用到

在我使用的過程中,使用start/end和dstart/dend就要加強判斷sindex和dindex是否超過長度,比較麻煩,所以就直接使用src.length和dest.length了

最後返回的字串,就是會新增在當前editbox已經存在文字後面,如果不超過限制的話

相關推薦

Android EditText限制文字長度中文2字元英文1字元

其實專案原本使用cocos2dx中的CCEditBox,使用editBox:setMaxLength(10),想要限制輸入長度,但是這裡實際使用的是如下圖: 這裡LengthFilter不會區分中英文,一律當做1個字元,而專案實際想要的是中文算2個字元,英文算做1個字元這

Android EditText限制文字長度中文3字元英文1字元

/** * 限制輸入字元長度 中文算3字元,英文算1字元 */ InputFilter filter = new InputFilter() { final int maxLen = 21;

如何實現按位元組擷取字串中文2位元組英文1位元組substring()

str = "我a智慧abc" substring(str, 5) 會擷取成為 “我a智慧a” 現在要實現中文佔2位元組,英文佔1位元組,按位元組擷取 ,輸出應該為"我a智" public class SubString{ /** * */ public

Android菜鳥學習筆記WebView載入html頁面頁面提交資料問題

在開發過程中,有一個問卷調查功能,問卷是url用webView載入html頁面出來,在html頁面提交時發現session沒和webview的同步導致提交失敗,這個問題困擾了我很久,後來在前輩的共同研究下,終於找到辦法:獲取html頁面提交的url,然後對url做一次coo

Spring Boot Admin 詳解Spring Boot 2.0基於 Eureka 的實現

Spring Boot Admin 用於監控基於 Spring Boot 的應用,它是在 Spring Boot Actuator 的基礎上提供簡潔的視覺化 WEB UI。 (一)簡介 Spring Boot Admin 提供了很多功能,如顯示 name、id 和 version,顯示線上狀態,

Android EditText字數限制中文2字元英文數字1字元超出後彈Toast

最近有這個需求,在編輯框中輸入字元,有長度的限制,中文算2個字元,英文算1個字元 1、中文、英文、數字都算一個字元: /** * @author pengbo * @date 2018/11/12 * 漢字、英文、數字都算一位,超出位數彈吐司 */ public class Max

android 字元長度限制中文2字元 英文1字元

比如最大10個字元,若超過10個,則顯示9或者8個字元加省略號. 啊啊啊啊啊 哎哎哎啊... 哎哎哎啊a... aaaaaaaa... public class CalTextLength { public static String handleText(String

Android EditText 限制輸入為ip類型

text ins TE sta digits listen andro color num editText.setInputType(InputType.TYPE_CLASS_NUMBER); String digits = "01234

限制input輸入字元中文2字元英文1字元

input的maxlength可以限制input的輸入的字元數,但是是字串的長度,相當於判斷str.length;然而經常會有中文字元算2個字元英文算1個字元的需求,目前只能通過編寫程式碼來實現。 <input class="remark-modify" maxlength="32" type=

Android EditText限制小數點輸入兩位

限制輸入小數點兩位 需要對輸入框設定鍵盤型別 inputType:number_decimal bank_card_pay_balance.addTextChangedListener(new TextWatcher() { boolean deleteLastChar;//是否需要刪

Java-基於百度API的圖片文字識別支援中文英文和中英文混合

PS: 基於Java 1.8 版本控制:maven 使用之前需要獲取對應的專案API_KEY,SECRET_KEY,這些引數在使用API的時候必須用到,

Java-基於百度API的圖片文字識別支援中文英文和中英文混合貨運APP開發找上海捌躍網路科技有限公司

PS: 基於Java 1.8 版本控制:maven 使用之前需要獲取對應的專案API_KEY,SECRET_KEY,這些引數在使用API的時候必須用到,用於生成access_token。 如何獲取這些引數:在百度開發者中心申請一個“通用文字識別”專案,然後就可

用python3 SVM訓練測試預測文字摘要中文分句分詞詞典詞袋測試建模預測

使用SVM 訓練和預測,需要正確的資料: X:儲存特徵。可以是二維矩陣,如:[ [c1 ,c2, c3…] ,[…],…];也可以是這樣的形式[{a1:c1,a2:c2,a3:c3…},{…} …],c1,c2…表示特徵值a1,a2,a3…表示詞位置(詞在le

Android EditText限制輸入字元的5種實現方式

         最近專案要求限制密碼輸入的字元型別, 例如不能輸入中文。   現在總結一下EditText的各種實現方式,  以比較各種方法的優劣。  第一種方式:  設定EditText的inputType屬性,可以通過xml或者java檔案來設定。假如我要設定為顯示

Android EditText 限制輸入的字數

共有兩種方法,第一種是在xml中直接設定,第二種是在程式碼中設定。 ** 在xml中設定 ** android:maxLength=”10” 代表限制輸入的字數最大為10 <Edi

Android EditText 限制輸入數字和字母設定

在xml:EditText 設定屬性----android:digis="ABCDE555555&&&&&"ABCDE555555&&&&&"是你的限制規則。例如:android:digits="

QTextEdit限制文字長度

   QString textContent = this->toPlainText();     int length = textContent.count();     int maxLength = maxLen; // 最大字元數     if(length

java中判斷字串真實長度中文2字元英文1字元的方法

public class Char_cn { public static void main(String[] args) { // TODO Auto-generated method stub String haha = "呵呵呵呵abcd";

JavaScript取得字串的長度中文日文

JavaScript取得字串的長度,完美識別中文,日文。 (charCode >= 0 && charCode <= 128):中文; (charCode >= 65377 && charCode <=

集成Android免費語音合成功能在線、離線、離在線融合

com nvi sid 審核 contacts lai 音量 ant demo 集成Android免費語音合成功能(在線、離線、離在線融合),有這一篇文章就夠了(離線)集成Android免費語音合成功能(在線、離線、離在線融合),有這一篇文章就夠了(離在線融合) 轉