调整Android多行TextView的大小

时间:2010-10-22 21:55:17

标签: android textview android-layout android-ui sizing

我有一个活动,我希望显示占据应用程序前四分之一的标题,并显示一组动态文本。在某些情况下,它将全部放在一条线上,我希望字体大小可以调整大小,因此它很大且易于阅读。在某些情况下,它将在多行(通常少于4行)并且需要更小。

复杂的是,如果我在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"
/>

4 个答案:

答案 0 :(得分:1)

您可以计算字符串长度并设置文本大小以适合每个长度的最佳大小

这种形式的东西

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

我希望这会有所帮助。

答案 1 :(得分:0)

你可以做到。在字符串值中附加换行符。然后将此字符串值设置为TextView的文本属性。

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

答案 2 :(得分:0)

还有一个解决方案,您可以使用WebView执行您想要的操作,查看此Android TextView Justify Text答案以获取详细信息。使用webview你不必关心你可以通过html css属性管理的行对齐

答案 3 :(得分:-1)

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

  1. 您的输入始终为1到4行文字
  2. 如果您有多行
  3. ,您总是只想在一行的末尾打破
  4. 您希望每条线尽可能大,以便它适合高度屏幕1/4的textview?
  5. 我建议您制作custom view

    • 使用Paint.getTextBounds在代码中动态确定最佳文字大小
    • 为了绘制文本,您可以使用辅助类StaticLayout来控制对齐等。
    • 让自定义视图占据屏幕的1/4或者将其放在LinearLayout中并使用layout_weight为其指定高度或在View.onMeasure
    • 中以编程方式设置它