【问题标题】:Can I limit TextView's number of characters?我可以限制 TextView 的字符数吗?
【发布时间】:2012-02-27 07:43:42
【问题描述】:

我现在拥有的是 TextView 元素的 ListView。每个 TextView 元素显示一个文本(文本长度从 12 个字到 100+ 个不等)。我想要的是让这些 TextViews 显示部分文本(比如说 20 个字或大约 170 个字符)。

如何将 TextView 限制为固定字符数?

【问题讨论】:

    标签: android textview


    【解决方案1】:

    您可以扩展 TextView 类并覆盖 setText() 函数。 在此函数中,您检查文本长度或字数。

    【讨论】:

    • 比计算文本长度或单词数更好的方法是使用“maxLines”属性和“ellipsize”属性来获得所需的效果。
    【解决方案2】:

    这是一个例子。我使用 maxLength 属性限制大小,使用 maxLines 属性将其限制为单行,然后使用 ellipsize=end 自动将“...”添加到已被截断的任何行的末尾。

    <TextView 
        android:id="@+id/secondLineTextView" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
        android:maxLines="1" 
        android:maxLength="10" 
        android:ellipsize="end"/>
    

    【讨论】:

    • "然后使用 ellipsize=marquee 在任何行的末尾自动添加一个"..."
    • 听起来很有希望。我试试看。
    • @Booger android:ellipsize="marquee" 不要在末尾附加省略号 (...),而是将截断文本的末尾作为限制的标志。 android:ellipsize="end" 将在末尾添加省略号 (...),而 android:ellipsize="start" 将在开头添加省略号
    • @ajdeguzman 如果我想要第二行的剩余文本,我应该怎么做。我已经设置了 maxLines = 2 并且没有包含 ellipsize 参数。我知道还有一种叫做 em 的东西,但我没有得到关于它是如何工作的明确解释。
    • 我认为 layout_width 与触发 ellipsize 属性有关。很好解释的例子,请关注link
    【解决方案3】:
    【解决方案4】:

    在TextView中使用下面的代码

     android:maxLength="65"
    

    享受...

    【讨论】:

      【解决方案5】:

      如果您对 xml 解决方案不感兴趣,也许您可​​以这样做:

      String s="Hello world";
      Textview someTextView;
      someTextView.setText(getSafeSubstring(s, 5));
      //the text of someTextView will be Hello
      

      ...

      public String getSafeSubstring(String s, int maxLength){
        if(!TextUtils.isEmpty(s)){
          if(s.length() >= maxLength){
            return s.substring(0, maxLength);
          }
        }
        return s;
      }
      

      【讨论】:

        【解决方案6】:

        https://stackoverflow.com/a/6165470/1818089 & https://stackoverflow.com/a/6239007/1818089 中所述,使用

        android:minEms="2"
        

        应该足以实现上述目标。

        【讨论】:

          【解决方案7】:

          我使用maxEms 属性做到了这一点。

           <TextView
              android:ellipsize="end"
              android:maxEms="10"/>
          

          【讨论】:

            【解决方案8】:

            程序化 Kotlin。

            切断文本的开头:

             val maxChars = 10000
             if (helloWorldTextView.text.length > maxChars) {
                  helloWorldTextView.text = helloWorldTextView.text.takeLast(maxChars)
             }
            

            剪掉正文的结尾:

             val maxChars = 10000
             if (helloWorldTextView.text.length > maxChars) {
                  helloWorldTextView.text = helloWorldTextView.text.take(maxChars)
             }
            

            【讨论】:

              【解决方案9】:

              我正在分享一个示例,其中我设置了 maxLength=1,即使用 maxLines 属性将其限制为单行,然后使用 ellipsize=end 自动将“...”添加到已设置的任何行的末尾隔断。

              请注意:layout_width 为 120dp,即 120dp 之后的任何文本 超过将触发“ellipsize=end”属性

              直接粘贴以下代码即可查看。

              <TextView
                  android:layout_width="120dp"
                  android:layout_height="wrap_content"
                  android:ellipsize="end"
                  android:maxLines="1"
                  android:maxLength="40"
                  android:text="Can I limit TextView's number of characters?"
                  android:textColor="@color/black"
                  android:textSize="12sp"
                  android:textStyle="bold" />
              

              .

              【讨论】:

                猜你喜欢
                • 2010-12-24
                • 2019-12-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-06-10
                相关资源
                最近更新 更多