淺談Android textview文字對(duì)齊換行的問題
今天忽然發(fā)現(xiàn)android項(xiàng)目中的文字排版參差不齊的情況非常嚴(yán)重,不得不想辦法解決一下。
經(jīng)過研究之后,終于找到了textview自動(dòng)換行導(dǎo)致混亂的原因了----半角字符與全角字符混亂所致!一般情況下,我們輸入的數(shù)字、字母以及英文標(biāo)點(diǎn)都是半角,所以占位無(wú)法確定。
它們與漢字的占位大大的不同,由于這個(gè)原因,導(dǎo)致很多文字的排版都是參差不齊的。
對(duì)此我找到了兩種辦法可以解決這個(gè)問題:
1. 將textview中的字符全角化。
即將所有的數(shù)字、字母及標(biāo)點(diǎn)全部轉(zhuǎn)為全角字符,使它們與漢字同占兩個(gè)字節(jié),這樣就可以避免由于占位導(dǎo)致的排版混亂問題了。 半角轉(zhuǎn)為全角的代碼如下,只需調(diào)用即可。
/**
* 半角轉(zhuǎn)換為全角
*
* @param input
* @return
*/
public static String ToDBC(String input) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (c[i] == 12288) {// 全角空格為12288,半角空格為32
c[i] = (char) 32;
continue;
}
if (c[i] > 65280 && c[i] < 65375)// 其他字符半角(33-126)與全角(65281-65374)的對(duì)應(yīng)關(guān)系是:均相差65248
c[i] = (char) (c[i] - 65248);
}
return new String(c);
}
2. 去除特殊字符或?qū)⑺兄形臉?biāo)號(hào)替換為英文標(biāo)號(hào)。
利用正則表達(dá)式將所有特殊字符過濾,或利用replaceAll()將中文標(biāo)號(hào)替換為英文標(biāo)號(hào)。則轉(zhuǎn)化之后,則可解決排版混亂問題。
/**
* 去除特殊字符或?qū)⑺兄形臉?biāo)號(hào)替換為英文標(biāo)號(hào)
*
* @param str
* @return
*/
public static String stringFilter(String str) {
str = str.replaceAll("【", "[").replaceAll("】", "]")
.replaceAll("!", "!").replaceAll(":", ":");// 替換中文標(biāo)號(hào)
String regEx = "[『』]"; // 清除掉特殊字符
Pattern p = Pattern.compile(regEx);
Matcher m = p.matcher(str);
return m.replaceAll("").trim();
}
解決之前層次不齊的排版截圖:

解決之后的整齊排版,如下圖:

以上這篇淺談Android textview文字對(duì)齊換行的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android自定義View實(shí)現(xiàn)柱狀波形圖的繪制
柱狀波形圖是一種常見的圖形。一個(gè)個(gè)柱子按順序排列,構(gòu)成一個(gè)波形圖。本文將利用Android自定義View實(shí)現(xiàn)柱狀波形圖的繪制,需要的可以參考一下2022-08-08
Android ViewPager無(wú)限循環(huán)滑動(dòng)并可自動(dòng)滾動(dòng)完整實(shí)例
對(duì)于Android ViewPager廣告頁(yè)可無(wú)限循環(huán)滑動(dòng)并可自動(dòng)滾動(dòng)帶有小圓點(diǎn)的這個(gè)功能很多APP都有這個(gè)功能,這里為大家提供了完整的實(shí)例代碼2018-03-03
Android通過json向MySQL中讀寫數(shù)據(jù)的方法詳解【寫入篇】
這篇文章主要介紹了Android通過json向MySQL中讀寫數(shù)據(jù)的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android json類的定義、調(diào)用及php接收json數(shù)據(jù)并寫入mysql的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-06-06
Android編程實(shí)現(xiàn)Gallery中每次滑動(dòng)只顯示一頁(yè)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)Gallery中每次滑動(dòng)只顯示一頁(yè)的方法,涉及Android擴(kuò)展Gallery控件實(shí)現(xiàn)翻頁(yè)效果控制的功能,涉及Android事件響應(yīng)及屬性控制的相關(guān)技巧,需要的朋友可以參考下2015-11-11
Android手機(jī)衛(wèi)士之綁定sim卡序列號(hào)
這篇文章主要介紹了Android手機(jī)衛(wèi)士之綁定sim卡序列號(hào)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10
Android AIDL中Map參數(shù)傳遞的問題詳解
這篇文章主要給大家介紹了關(guān)于Android AIDL中Map參數(shù)傳遞問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來一起看看吧。2017-12-12
Android使用Intent發(fā)送短信的實(shí)現(xiàn)方法
這篇文章主要介紹了Android使用Intent發(fā)送短信的實(shí)現(xiàn)方法,結(jié)合簡(jiǎn)單實(shí)例形式分析了Android短信發(fā)送功能的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-07-07

