亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

解決TextView排版自動(dòng)換行問題

系統(tǒng) 2203 0
justified實(shí)現(xiàn)Textview和Edittext文字左右對齊
https://github.com/programingjd/justified

http://blog.sina.com.cn/s/blog_73615d370100zpt5.html

今天忽然發(fā)現(xiàn)android項(xiàng)目中的文字排版參差不齊的情況非常嚴(yán)重,不得不想辦法解決一下。經(jīng)過研究之后,終于找到了textview自動(dòng)換行導(dǎo)致混亂的原因了----半角字符與全角字符混亂所致!一般情況下,我們輸入的數(shù)字、字母以及英文標(biāo)點(diǎn)都是半角,所以占位無法確定。它們與漢字的占位大大的不同,由于這個(gè)原因,導(dǎo)致很多文字的排版都是參差不齊的。對此我找到了兩種辦法可以解決這個(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) {
				c[i] = (char) 32;
				continue;
			}
			if (c[i] > 65280 && c[i] < 65375)
				c[i] = (char) (c[i] - 65248);
		}
		return new String(c);
	}

  

2. 去除特殊字符或?qū)⑺兄形臉?biāo)號替換為英文標(biāo)號。利用正則表達(dá)式將所有特殊字符過濾,或利用replaceAll()將中文標(biāo)號替換為英文標(biāo)號。則轉(zhuǎn)化之后,則可解決排版混亂問題。
    
/**
	 * 去除特殊字符或?qū)⑺兄形臉?biāo)號替換為英文標(biāo)號
	 * 
	 * @param str
	 * @return
	 */
	public static String stringFilter(String str) {
		str = str.replaceAll("【", "[").replaceAll("】", "]")
				.replaceAll("!", "!").replaceAll(":", ":");// 替換中文標(biāo)號
		String regEx = "[『』]"; // 清除掉特殊字符
		Pattern p = Pattern.compile(regEx);
		Matcher m = p.matcher(str);
		return m.replaceAll("").trim();
	}

  

解決之前層次不齊的排版截圖:

解決TextView排版自動(dòng)換行問題

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

解決TextView排版自動(dòng)換行問題

Android自定義view-文本自動(dòng)換行
文本自動(dòng)換行原理:文本超出控件寬度后,自動(dòng)換到下一行繪制。
實(shí)現(xiàn)代碼:
    
protected void onDraw(Canvas canvas) {
        FontMetrics fm = mPaint.getFontMetrics();
        
    float baseline = fm.descent - fm.ascent; 
    float x = 0;
    float y =  baseline;  //由于系統(tǒng)基于字體的底部來繪制文本,所有需要加上字體的高度。
        
    String txt = getResources().getString(com.orgcent.demo.R.string.hello);
        
    //文本自動(dòng)換行
    String[] texts = autoSplit(txt, mPaint, getWidth() - 5);
        
    System.out.printf("line indexs: %s\n", Arrays.toString(texts));
        
    for(String text : texts) { 
        canvas.drawText(text, x, y, mPaint);  //坐標(biāo)以控件左上角為原點(diǎn)
        y += baseline + fm.leading; //添加字體行間距
    }
}

  

    
/**
 * 自動(dòng)分割文本
 * @param content 需要分割的文本
 * @param p  畫筆,用來根據(jù)字體測量文本的寬度
 * @param width 最大的可顯示像素(一般為控件的寬度)
 * @return 一個(gè)字符串?dāng)?shù)組,保存每行的文本
 */
private String[] autoSplit(String content, Paint p, float width) {
    int length = content.length();
    float textWidth = p.measureText(content);
    if(textWidth < = width) {
        return new String[]{content};
    }
        
    int start = 0, end = 1, i = 0;
    int lines = (int) Math.ceil(textWidth / width); //計(jì)算行數(shù)
    String[] lineTexts = new String[lines];
    while(start < length) {
        if(p.measureText(content, start, end) > width) { //文本寬度超出控件寬度時(shí)
            lineTexts[i++] = (String) content.subSequence(start, end);
            start = end;
        }
        if(end == length) { //不足一行的文本
            lineTexts[i] = (String) content.subSequence(start, end);
            break;
        }
        end += 1;
    }
    return lineTexts;
}

  


解決TextView排版自動(dòng)換行問題

解決TextView排版自動(dòng)換行問題


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 波多野结衣av1区2区3区 | 色综合久久一本首久久 | 亚洲日韩精品欧美一区二区 | 久久国产成人亚洲精品影院老金 | 色女影院 | 成 人 黄 色 视频 免费观看 | 国产激情一区二区三区在线观看 | 不卡网| 免费在线亚洲 | 日本人成免费大片 | 国产野花视频天堂视频免费 | 天天操精品视频 | 日本三级日本三级人妇三级四 | 日本成片 | 日韩视频观看 | 毛片免费观看日本中文 | 亚洲欧美一区二区三区麻豆 | 丁香午夜婷婷 | 日产国语一区二区三区在线看 | 日日嗷 | 亚洲午夜一区 | 午夜欧美成人 | 免费在线精品视频 | 久草在线手机 | 自拍偷拍三级 | 色综合久久综合欧美综合 | 久久久国产精品网站 | 91伊人久久 | 日本不卡网站 | 中文字幕久精品免费视频 | 国产操美女| 欧美黄色免费网址 | 国产精品一区二区三区免费视频 | 九九精品国产99精品 | 免费一级成人毛片 | 成人看黄色大片 | 国产精品青青青高清在线密亚 | 日本夜夜夜| 中文字幕在线影院 | 国产极品嫩模大尺度福利视频 | 欧美性一区二区三区五区 |