2010-10-22 43 views
10

我有一个活动,我想显示一个标题,占据应用程序的顶部四分之一,并显示一组动态文本。在某些情况下,它将全部适合于一行,并且我希望字体大小能够变大,因此它很大且易于阅读。在某些情况下,它将在多行(通常小于4),并且需要更小。调整Android多行TextView

的复杂之处在于,如果我明确设置的setText换行符有时它会插入一个新行,我没想到一个,即:

 
"My first line of text\nMy Second line of text" 
Might get turned into (it's right adjusted in this version): 
"My first line of 
      text 
    My second line 
      of text" 

我不知道如何去保存任何TextView试图插入换行符或让它只是格式化整个事情。如果我将一些文本设置为一个非常长的单个单词,它会在某个选定的点处在中间插入一个换行符。而其他时候,我只是随机获取最后几行文字。

我应该只是明确地设置字体大小为非常小,让它正确地布局,然后手动调整大小?我应该使用这种“最佳做法”吗?如果我将字体大小设置为相当大的字体,那么这种方法很有用,但如果能够找到“正确”的方式,那将是一件好事。我宁愿不必手动添加4个单行TextView,并自己设置格式。

我使用的布局XML是:

<TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentRight="true" 
     android:layout_marginTop="10dip" 
     android:layout_marginRight="8dip" 
     android:singleLine="false" 
     android:ellipsize="marque" 
     android:gravity="right|bottom" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textSize="30sp" 
/> 
+0

恩,这不是很清楚你想做什么。你想调整文本大小来填充文本框?你为什么要添加新行?只需设置大小,放入文本,并让它包装。 – Falmarri 2010-10-22 22:44:43

+0

你放了多大的尺寸才能真正适合整个文本框?如果您选择的尺寸太大,TextView会决定在文本中加入/插入新行(我不确定它是如何决定的)。如果你选择一个小的尺寸,并且不要在你自己中添加新的线条,那么就很难确定它的大小,而不是基本上逐步调整每个字体大小,并且每次都重新输出文本(插入新线条)。如果你只是防止TextView搞乱事情并且自己调整/插入新行,那将会很好。 – William 2010-10-23 23:05:11

回答

0

你可以做到这一点。在字符串值中追加一个新的行结构。然后将此字符串值设置为TextView的文本属性。

String temp = "ASDF \n"+"EFG \n"+"HIJ"; 
TextView tv=//find it from the context 
tv.setText(temp); 
0

还有一个解决方案,您可以使用的WebView做你想要检查这个Android TextView Justify Text答案细节的东西。使用webview你不必关心线对齐,你可以通过HTML CSS属性管理

-1

让我回顾一下你的问题,以确保我正确理解你。

  1. 您输入始终文本的1至4号线
  2. 你总是和只想在行结束时断裂,如果你有一个以上的线
  3. 你想成为各行大尽可能使它适合1/4高度屏幕的文本视图?

我建议你做一个custom view

  • 使用Paint.getTextBounds来动态确定最佳的文字大小码
  • 绘制你可以使用辅助类StaticLayout取向控制和这样的文字。
  • 有你的自定义查看占据屏幕的1/4要么把它的LinearLayout内,并使用layout_weight指定它的高度或View.onMeasure
1

编程设置,您可以指望的字符串lenght和设置文字大小,以适应最佳尺寸为每个lenght

东西以这种形式

if(myString.length()==40){ 
    myTextview.setTextSize(11); 
else if(myString.length()==25){ 
    myTextview.setTextSize(16); 
... 

我希望这有助于。