【问题标题】:How can I set a minimum width (in characters) for a TextView?如何为 TextView 设置最小宽度(以字符为单位)?
【发布时间】:2011-03-12 10:47:55
【问题描述】:

我已经在这里很好地搜索了这个,但找不到解决方案。

我在包含整数的 RelativeLayout 中有一个 TextView。 数字将在 1 到 99 之间 - 谁能告诉我如何调整大小 TextView 使其宽度始终为字符串“99”的宽度 即使它只包含“1”?

我需要这个,因为它右侧的组件位置 TextView 取决于它的宽度,所以所有的位置取决于有多少 TextView 包含的数字。

我不介意这是用 XML 还是代码完成的——我只是想避免 以像素为单位设置 TextView 的宽度!

感谢您提供任何可能的解决方案;请问我有没有漏掉 重要信息!

【问题讨论】:

    标签: android text rendering


    【解决方案1】:

    使用TextView的android:maxLength属性。请阅读this

    【讨论】:

    • 您好,感谢您的回答,但这是我真正需要的最小长度。 :-)
    【解决方案2】:

    我认为您正在寻找 Paint 类中的 getTextBounds() 方法。 自己没试过。

    【讨论】:

      【解决方案3】:

      试试这个:

      android:layout_width="wrap_content"
      android:minEms="2"
      

      【讨论】:

      • 你可能还想添加 android:gravity="center"
      【解决方案4】:

      如果您的字体是等宽字体,Ems 可以工作。对于比例字体,您希望它的宽度为两个 '0',而不是两个 'm'。您可以像这样回退到 TextPaint.measureText:

      float measureText = zip.getPaint().measureText("00000");
      zip.setWidth(zip.getPaddingLeft() + zip.getPaddingRight() + (int) measureText);
      

      【讨论】:

      • 像魔术一样工作!非常感谢分享此代码 sn-p。 :)
      • 设置 em 对我不起作用,但确实如此。谢谢 pforhan :)
      【解决方案5】:

      最好的方法是使用TextPaint。这是一个简单的例子:

      TextPaint textPaint = new TextPaint();
      textPaint.setTextSize(yourTextView.getTextSize());
      yourTextView.setMinWidth((int) textPaint.measureText("-88.88"));
      

      不要忘记在 TextPaint 对象中指定文本大小
      measureText 中输入您希望看到的最长字符串(我写了“-88.88”,假设我的文本可以处理 100 以下的正数或负数,逗号后有 2 位数字)

      【讨论】:

        【解决方案6】:

        简单的解决方案,将 textview 的字体设置为 Monospace。

        android:typeface="monospace"
        

        【讨论】:

          猜你喜欢
          • 2012-07-14
          • 2012-10-03
          • 1970-01-01
          • 2011-09-04
          • 2011-10-16
          • 1970-01-01
          • 2019-01-01
          • 1970-01-01
          • 2021-11-16
          相关资源
          最近更新 更多