3

我认为这与 Set width of TextView 在字符方面相反

我有一个 TextView,我在其中显示一些报告数据。我对其中的一部分使用等宽的 TypefaceSpan,因为我希望列对齐。

我使用我的测试 Android 设备来计算我可以容纳多少列,但 Android 模拟器似乎正好少了一列,这使得在纵向模式下以一种丑陋的方式包装。

有没有办法找出一行应该有多少个字符?

4

3 回答 3

13

答案是使用 textView 的 Paint Object 的 breakText()。这是一个示例,

int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
 true, textView.getWidth(), null);

现在totalCharstoFit包含可以放入一行的确切字符。现在您可以制作完整字符串的子字符串并将其附加到 TextView 中,如下所示,

String subString=fullString.substring(0,totalCharstoFit);
textView.append(substring);

并计算剩余的字符串,你可以这样做,

fullString=fullString.substring(subString.length(),fullString.length());

现在完整的代码,

在while循环中执行此操作,

while(fullstirng.length>0)
{
int totalCharstoFit= textView.getPaint().breakText(fullString,  0, fullString.length(), 
     true, textView.getWidth(), null);
 String subString=fullString.substring(0,totalCharstoFit);
    textView.append(substring);
 fullString=fullString.substring(subString.length(),fullString.length());

}
于 2012-07-16T04:33:06.047 回答
1

好吧,你可以做数学来找出这个,找到字符的宽度,将屏幕的宽度除以这个,你就会得到你想要的东西。

但是就不能设计得更好吗?有没有可以组合在一起的列?显示为图形,甚至完全排除?

另一种可能的解决方案是使用类似 viewpager 的东西。(找出有多少列的宽度适合第一页,然后将剩余的表格拆分到第二页)。

于 2012-07-16T01:58:36.150 回答
1

您可以通过以下代码获取 Textview 的总行并获取每个字符的字符串。然后您可以根据需要为每一行设置样式。

我将第一行设置为粗体。

private void setLayoutListner( final TextView textView ) {
    textView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            textView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

            final Layout layout = textView.getLayout();

            // Loop over all the lines and do whatever you need with
            // the width of the line
            for (int i = 0; i < layout.getLineCount(); i++) {
                int end = layout.getLineEnd(0);
                SpannableString content = new SpannableString( textView.getText().toString() );
                content.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 0, end, 0);
                content.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), end, content.length(), 0);
                textView.setText( content );
            }
        }
    });
}

试试这种方式。您可以通过这种方式应用多种样式。

您还可以通过以下方式获取 textview 的宽度:

for (int i = 0; i < layout.getLineCount(); i++) {
        maxLineWidth = Math.max(maxLineWidth, layout.getLineWidth(i));
}
于 2015-02-13T10:01:27.463 回答