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

来源:互联网 发布:最近网络流行词 编辑:程序博客网 时间:2024/04/29 16:29
/** * 分隔获取的要显示的字符串,保存在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;// 把下一行的字的现有宽度设为0sStrID = 0;// 把剩下的字首个字的下标重新定义为0break;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;}
原创粉丝点击