您的位置:首页 > 移动开发 > Android开发

Android用View实现显示中英文混排的文字

2010-09-10 12:49 483 查看
/**
* 分隔获取的要显示的字符串,保存在string数组
*
* @param aStr
* String 输入的字符串
* @param aFont
* Font 字体
* @param aRowMaxW
* 一行的最大宽度
* @return String[]
*/
public static String[] clipString(String aStr, Paint aPaint, int aRowMaxW ) {
if (aStr == null) {
return null;
}
int lineNum = 0;

if (aRowMaxW < aPaint.measureText("学")) {
aRowMaxW = (int) aPaint.measureText("学");
// System.out.println("charWidth: " + aFont.charWidth('学'));
}
int sStrID = 0;// 字符串中每个字的标记
StringBuffer sStringBuffer = null;
int sRowWidth = 0;// 一行中当前字的宽度
Vector sStrManager = new Vector();
char sChar = ' ';
int spacePos = 0;
while (sStrID < aStr.length()) {
sChar = aStr.charAt(sStrID);
// Log.i("------"+line,lineNum+"++++");
switch (sChar) {
case '/r':
case '/n':// 遇到换行的时候
if (sStrID > 0) {
sStrManager.addElement(aStr.substring(0, sStrID));
lineNum++;
if (lineNum == line) {
if (aScreenWidth > 0) {
aRowMaxW = aScreenWidth - 10;
}
}
// Log.i("n+++++",lineNum+"++++");
}
aStr = aStr.substring(sStrID + 1);// 取回/n后面的字符
sRowWidth = 0;// 把下一行的字的现有宽度设为0
sStrID = 0;// 把剩下的字首个字的下标重新定义为0
break;
case ' ':
spacePos = sStrID; // 当出现英文单词截断时,刚好保存截断前面一个空格的位置
sRowWidth += aPaint.measureText(String.valueOf(sChar));
sStrID++;
break;
case '/t':
sStringBuffer = new StringBuffer(aStr);
sStringBuffer.deleteCharAt(sStrID);
sStringBuffer.insert(sStrID, " ");
aStr = sStringBuffer.toString();
sRowWidth += aPaint.measureText(" ");
sStrID++;
break;
default:
if (sRowWidth + aPaint.measureText(String.valueOf(sChar)) > aRowMaxW - 15) { // 如果文字的宽度超过手机屏幕的宽度,要进行换行。
// 如果截断位置是两个 ASCII 字符,且后一个不是空格。表明是在英文单词当中进行的截断
// 则需要查找最后一个空格的出现位置
if ((aStr.charAt(sStrID - 1) > 0)
&& (aStr.charAt(sStrID - 1) < 128)
&& (aStr.charAt(sStrID) > 0)
&& (aStr.charAt(sStrID) < 128)
&& (aStr.charAt(sStrID) != ' ')) {
sStrID = spacePos;
}
sStrManager.addElement(aStr.substring(0, sStrID));
lineNum++;
aStr = aStr.substring(sStrID);
sStrID = 0;
sRowWidth = 0;
} else {
sRowWidth += aPaint.measureText(String.valueOf(sChar));
sStrID++;
}
break;
}
}
sStrManager.addElement(aStr);
// sStrManager.addElement(" "); //加多一个空白行
String reStr[] = new String[sStrManager.size()];
sStrManager.copyInto(reStr);// 把strManager里的字符复制到新定义的reStr[]数组中
return reStr;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: