/*
* 功能:多行横排文本转换为多列直排(以换行符 \n 作为断行标记)
* 说明:可支持1~N行,但要求有换行标记符,或稍作修改以标点符号换行
* @author: 云冰工作室 yunbing.com
* @param: strText
* @return: 返回值为行列转置后的多行文本
*/
public static String getTextHtoV(String strText){
String strResult = "";
String br = "\n"; //断行标记,这里可改用逗号或分号等字符
String strArr[] = strText.split(br);
int nMaxLen = 0; //各行最多字符数
int nLines = strArr.length; //总共的行数
char charArr[][] = new char[nLines][]; //字符陈列(即二维数组)
for (int i = 0; i < nLines; i++) {
String str = strArr[i];
int n = str.length();
//以最长的行的字符数(即原列数)作为目标陈列的行数
if (n > nMaxLen) nMaxLen = n;
charArr[i] = strArr[i].toCharArray();
}
//行列转换
for (int i = 0; i < nMaxLen; i++) {
for (int j = 0; j < nLines; j++) {
//若短句字符已“用完”则以空格代替
char c = i < charArr[j].length ? charArr[j][i] : ' ';
strResult += String.valueOf(c);
//两列文字之间加空格,不需要的话请注释掉下面一行
if (j < nLines - 1) strResult += " "; //★
}
strResult += br; //添加换行符
}
return strResult;
}
方法引用例——
String strText = strTalks[nArrId]; //从字符数组或数据库读取字符串
strText = Util.getTextHtoV(strText); //行列转换
textView.setText(strText); //显示到TextView
另,上述代码中标记 ★ 的语句,是为了避免两列文字过于拥挤而增加的列间空格符,简单隔开各列。 原本希望通过控制 TextView 的字间距,但当前版本的 Android 似乎并未提供相应方法。 搜索网上发现不少“教程”声称可以利用 TextView 的 setTextScaleX() 方法设置字间距,但从字面上(Scale)就可看出其实它是用于设置字体的缩放比率(试验结果亦是如此)。 若有需要调节字间距的朋友,可参考我的另一文章: Android 中如何调节 TextView 的字间距