【问题标题】:Sizing an Android multi-line TextView调整 Android 多行 TextView 的大小
【发布时间】:2010-10-22 21:55:16
【问题描述】:

我有一个 Activity,我想在其中显示占据应用顶部四分之一的标题并显示一组动态文本。在某些情况下,它会全部放在一行上,我希望字体大小变大,这样它就大且易于阅读。在某些情况下,它会位于多行上(通常少于 4 行)并且需要更小。

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

"我的第一行文字\n我的第二行文字" 可能会变成(在这个版本中正确调整): “我的第一行 文本 我的第二行 文字”

我不确定如何阻止 TextView 尝试插入换行符或让它只负责格式化整个内容。如果我将一些文本设置为一个非常长的单词,它将在中间的某个选定点插入一个换行符。有时我只是随机获取最后几行文本。

我是否应该明确地将字体大小设置为非常小以使其布局正确,然后手动调整大小?我应该为此使用“最佳实践”吗?如果我将字体大小设置为相当大的字体,它会起作用,但很高兴弄清楚这样做的“正确”方法是什么。而且我宁愿不必手动添加 4 个单行 TextViews 并自己格式化它们。

我使用的布局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"
/>

【问题讨论】:

  • 嗯,不太清楚你想做什么。您想调整文本大小以填充文本框吗?你为什么要添加换行符?只需设置大小,放入文本,然后换行即可。
  • 你放了多少尺寸才能使它真正适合整个文本框?如果您选择的尺寸太大,TextView 会决定在您的文本中截断/插入新行(我不确定它是如何决定的)。如果您选择一个小尺寸并且不给自己添加新行,那么很难调整它的大小,而无需基本上逐步检查每个字体大小并让它每次都重新排列文本(插入新行)。如果您只是防止 TextView 弄乱事物并自己调整大小/插入新行,那就太好了。

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


【解决方案1】:

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

这种形式的东西

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

我希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      还有另一种解决方案,您可以使用 WebView 来做您想做的事情,请查看此Android TextView Justify Text 答案以获取详细信息。使用 webview,您不必关心行对齐,您可以通过 html css 属性进行管理

      【讨论】:

        【解决方案4】:

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

        1. 您的输入始终是 1 到 4 行文本
        2. 如果你有不止一行,你总是只想在一行的末尾换行
        3. 您想让每一行尽可能大,以适应屏幕高度的 1/4 的 textview?

        我建议你做一个custom view:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-05
          • 1970-01-01
          • 2021-04-13
          • 1970-01-01
          • 2011-11-11
          • 1970-01-01
          相关资源
          最近更新 更多