有什么方法可以在多列上显示长文本?
例如,我需要显示一篇文章,我有整个String
,我想将它放在3列上。我怎样才能做到这一点?是否有任何图书馆可以帮助我,或者您知道我应该如何解决这个问题?
任何建议表示赞赏。感谢。
编辑:问题是字符串的拆分而不是布局。我知道我可以使用TableLayout ...或权重...来均匀分配列等等。问题是如何正确拆分String
。也许2列会被填满而第3列只有一半?我不知道如何处理这个,而不是实际的布局。
答案 0 :(得分:5)
检查TableLayout。要分割文本,您可以在1/3的字符数之后拆分文本。对于cource,您必须将文本拆分为一个空白字符。 更新:请参阅我发布的结尾处的示例代码。
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1">
<TableRow>
<TextView
android:text="@string/table_layout_4_open"
android:padding="3dip" />
<TextView
android:text="@string/table_layout_4_open_shortcut"
android:gravity="right"
android:padding="3dip" />
</TableRow>
<TableRow>
<TextView
android:text="@string/table_layout_4_save"
android:padding="3dip" />
<TextView
android:text="@string/table_layout_4_save_shortcut"
android:gravity="right"
android:padding="3dip" />
</TableRow>
</TableLayout>
对于拆分,您可以测试此代码。 algorithem可能会更接近分裂边界,但它可以工作。
public static String[] getRows(String text, int rows) {
// some checks
if(text==null)
throw new NullPointerException("text was null!");
if(rows<0 && rows > 10)
throw new IllegalArgumentException("rows must be between 1 and 10!");
if(rows==1)
return new String[] { text };
// some init stuff
int len=text.length();
int splitOffset=0;
String[] ret=new String[rows];
Pattern whitespace = Pattern.compile("\\w+");
// do the work
for(int row=1;row<rows;row++) {
int end;
int searchOffset=len/rows*row;
// search next white space
Matcher matcher = whitespace.matcher(text.substring(searchOffset));
if(matcher.find() && !matcher.hitEnd()) {
// splitting on white space
end=matcher.end()+searchOffset;
} else {
// hard splitting if there are no white spaces
end=searchOffset;
}
ret[row-1]=text.substring(splitOffset, end);
splitOffset=end;
}
// put the remaing into the last element
ret[rows-1]=text.substring(splitOffset);
return ret;
}
答案 1 :(得分:4)
您在寻找“报纸专栏”风格吗?一旦第一个(固定大小)文本框填充,文本应继续进入另一个,依此类推?
如果是这样,为什么不将长字符串显示在WebView中,您可以使用HTML和CSS更轻松地实现此目的?
答案 2 :(得分:3)
使用(Calculate text size according to width of text area)
Paint paint = new Paint();
Rect bounds = new Rect();
int text_height = 0;
int text_width = 0;
paint.setTypeface(Typeface.DEFAULT);// your preference here
paint.setTextSize(25);// have this the same as your text size
String text = "Some random text";
paint.getTextBounds(text, 0, text.length(), bounds);
text_height = bounds.height();
text_width = bounds.width();
计算你的文字占用多少空间。 并计算view.getWidth()大约你的视图宽度... 然后通过相应地划分文本来做必要的事情。