Android - TextView限制文本長度,英文佔1位,中文佔2位

轉載請註明出處:https://blog.csdn.net/mythmayor/article/details/101022086

一、TextView自帶屬性限制長度

我們知道,TextView有一個android:maxLength的屬性,這個屬性是用來限制可展示的字符數的,並不區分中英文,只限制數量。例如設置android:maxLength=“4”,字符串"mythmayor"將展示爲"myth",字符串"馭霖駿泊36"將展示爲"馭霖駿泊"。
TextView還有一個比較常用的屬性:android:maxEms。該屬性是用來限制文本長度的,計算的時候會區分中英文的佔位,即如果設置android:maxEms=“4”,正常來講能夠展示4箇中文字符或8個英文字符。配合android:ellipsize屬性可以選擇超出限制後不添加省略號、在文本前添加省略號,在文本中間添加省略號和在文本後添加省略號。但是使用android:maxEms經常會遇到一個問題就是,文本超出後展示的字符數可能會有一些變化,比如設置android:maxEms=“4”,可能中文字符會展示3-5個,英文字符會展示7-9個。還有就是如果android:ellipsize=“none”,即不設置省略號,超出部分的文本可能出現展示一半的情況。

二、自定義方法限制TextView展示長度

既然使用TextView自帶的屬性可能無法完全滿足我們的需求,那麼我們就要想其它的辦法。另外一種很好的思路就是通過處理文本來達到展示固定長度的字符。下面直接上代碼:
/**
     * 處理文本,將文本位數限制爲maxLen,中文兩個字符,英文一個字符
     *
     * @param content 要處理的文本
     * @param maxLen  限制文本字符數,中文兩個字符,英文一個字符。例如:a啊b吧,則maxLen爲6
     * @return
     */
    public static String handleText(String content, int maxLen) {
        if (TextUtils.isEmpty(content)) {
            return content;
        }
        int count = 0;
        int endIndex = 0;
        for (int i = 0; i < content.length(); i++) {
            char item = content.charAt(i);
            if (item < 128) {
                count = count + 1;
            } else {
                count = count + 2;
            }
            if (maxLen == count || (item >= 128 && maxLen + 1 == count)) {
                endIndex = i;
            }
        }
        if (count <= maxLen) {
            return content;
        } else {
            //return content.substring(0, endIndex) + "...";//末尾添加省略號
            return content.substring(0, endIndex + 1);//末尾不添加省略號
        }
    }
可以通過上面自定義的方法來限制TextView展示的長度及內容,區分中英文,中文佔2位,英文佔1位,這樣通過TextView自帶屬性和自定義方法的限制基本就能滿足所有的需求了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章