【问题标题】:Text does not ellipsize文字没有椭圆
【发布时间】:2011-07-20 21:49:40
【问题描述】:

我将 TextView 设置为 ellipsize,但是当我将文本放入其中时,它并没有这样做。有什么想法吗?

<TextView 
    android:id="@+id/LegalsView" 
    android:ellipsize="end"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium" />

【问题讨论】:

  • 你试过android:maxwidth属性吗,我想这就是你需要的

标签: android android-layout textview


【解决方案1】:

试试:

android:singleLine="true"

【讨论】:

  • 这条线与 ellipsize 相结合会产生所需的行为。
  • 已弃用,最好按照文档建议使用 maxLines。
  • maxLines 即使在一些相对较新的实现中也无法使用,而 singleLine 可以。
  • 小心使用这个......它可以工作,但它可能会导致意外行为,并且在容器中的布局中使用时可能导致文本消失。
  • 如果我需要用两行省略文本怎么办?
【解决方案2】:
android:layout_width="wrap_content"

将允许TextView 根据需要展开(包括离开屏幕)。要使其成为椭圆形,您必须按照citizen conn 推荐的方式设置宽度,最好使用android:layout_width="fill_parent" 而不是绝对值。

其他提示:您还需要设置 TextView 的 maxLines(可能为 1),并要显示实际的省略号(“...”),您可能还需要设置

android:scrollHorizontally="true"

【讨论】:

  • 格伦登,如果你想做android:ellipsize="end",那么scrollHorizontally 不应该是false。 (如果你想做android:ellipsize="marquee",它应该是true。)另外,我发现添加android:linesandroid:maxLines 属性就足够了——不需要android:scrollHorizontally。哦,设置 linesmaxLines 大于 1 也适用于我。
  • 当我在一年前发布这个答案时,这是正确的,并且 scrollHorizo​​ntally 需要设置为 true 才能使 ellipsize 属性起作用。我不再做太多的 Android 开发,所以如果这发生了变化,请随时提出修改建议。
  • 不,它仍然必须为真,否则省略号将不会显示。没有意义,但你去吧。
【解决方案3】:

你需要匹配android的设置才能正确计算出物体的位置。有几种可能的组合,并且取决于布局的其余部分是否在同一行。

这是一个有效的组合:

android:layout_width="0dip" // dynamic width
android:layout_weight="1"   // less weight, other objects still "0"
android:ellipsize="end"     // ... into end of text (right)
android:singleLine="true"   // one line, deprecated, but necessary for some ambients
android:maxLines="1"        // one line, new mode

总而言之,你表示权重,如果你使用动态布局,或者只是固定大小,那么表示只有一行并配置“...”的显示方式。

【讨论】:

  • android:singleLine="true" 已弃用?能给个出处吗?
  • 在 Eclipse 中显示,来自更新的 Android SDK 的消息。我保持与旧 android 版本的兼容性。
  • android:singleLine="true" 已弃用,但在我的情况下,它在 maxLines="1" 不是时起作用
  • 这就是我的诀窍,即使它已经贬值了! android:singleLine="true" // 一行,已弃用,但对于某些环境是必需的
【解决方案4】:

当我添加时,我的应用开始忽略 maxlines 和 ellipsize

android:textIsSelectable="true"

这些选项似乎不兼容。

【讨论】:

  • WigglyWorld @nivm 我也面临这个问题。你是怎么解决这个问题的?
  • @Mathew ive 发现,如果您将 ellipsize 更改为“end”或基本上任何不是“中间”的东西,它就会起作用。使用带有 android:textIsSelectable 的“中间”类型时,我没有找到任何流畅的解决方案。
  • @Mathew 确保你使用 - singleLine="true"
  • 我将我的 textview 设置为一个无法滚动的自定义类。将它与 android:textIsSelectable = "true" 一起使用,它起作用了。公共类 NoScrollTextView 扩展 AppCompatTextView { public NoScrollTextView(Context context) { super(context); } public NoScrollTextView(Context context, AttributeSet attrs) { super(context, attrs); } public NoScrollTextView(上下文上下文,AttributeSet attrs,int defStyleAttr){ super(context,attrs,defStyleAttr); } @Override public void scrollTo(int x, int y) { //什么都不做 } }
【解决方案5】:

我能够完成这项工作的唯一方法是设置width="1dp"weight="1"ellipsize="end"maxLines="1"scrollHorizontally="true"。前两个与width="match_parent" 具有相同的效果,但小部件未从显示器边缘扩展,其余三个设置都必须进行,以使文本变为椭圆。

【讨论】:

    【解决方案6】:

    如果您试图让多行省略号工作,不幸的是它不能很好地工作。这是 Android 平台中的一个已知错误,据我所知尚未修复。
    TextView 中,你能得到的最好的结果是 2 行椭圆化(可以通过设置

    android:maxLines="2"
    

    请参阅this 链接。
    即使使用另一个答案中提到的绝对宽度,它仍然最多只能为您提供 2 行省略号。 (但也如上所述,单行省略号是可以实现的)。例如,您的文本可能会填满您的 8 行 TextView,但当您打开省略号时会如下所示:

    +------------------------------ -----+
    | |
    |这是我应该填写的很酷的文字|
    |整个 textview 但不幸的是因为 t...|
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    | |
    +-------------------------------------------------- --+
    
    

    如果您知道 TextView 的大小,则可以使用可用的自定义组件here(不幸的是,最初托管它的 google 代码项目似乎已经消失,因此我只能找到这个链接)。

    【讨论】:

    • 我已经做过很多次单线椭圆了。它只需要一些调整(见我的回答)。
    • 单线椭圆不是问题 - 多线椭圆被破坏了。所以是的,您的解决方案适用于单行省略号。
    • 啊,我的错。我看到我们对 OP 的预期结果做出了不同的猜测。我从来没有尝试过省略多行。
    • 如果android:maxLines="2",必须设置android:singleLine="false"
    【解决方案7】:

    如果您没有为 TextView 定义特定宽度,则当您的文本达到父视图的宽度时,文本将首先变为椭圆。

    【讨论】:

      【解决方案8】:

      此解决方案有效:

      android:ellipsize="end"
      android:singleLine="false"
      android:lines="3"
      android:maxLines="3"
      

      宽度也可以设置为“wrap_content”

      【讨论】:

        【解决方案9】:

        您将 layout_width 更改为某个 dp 而不是 wrap_content

        使用
        android:singleLine="true"

        android:ellipsize="end"

        代码:

            android:layout_width="50dp"
            android:layout_height="wrap_content"
            android:text="check this text"
            android:id="@+id/textView"
            android:singleLine="true"
            android:ellipsize="end"/>
        

        【讨论】:

          【解决方案10】:

          仅适用于运行时,请执行以下操作:

          textView.setEllipsize(TruncateAt.END);
          textView.setLines(1);
          textView.setHorizontallyScrolling(true);
          textView.setText("Long text goes here");
          

          【讨论】:

            【解决方案11】:

            你也可以像这样设置 maxLines:

                    <TextView
                        android:id="@+id/txt_title"
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:maxLines="3"
                        android:ellipsize="end"
                        android:textStyle="bold"/>
            

            当文本超过 maxLines 设置时,会出现省略号。

            【讨论】:

              【解决方案12】:

              android:maxWidth="150dp" 是唯一对我来说文本被省略的情况。

              【讨论】:

                【解决方案13】:

                我认为您需要指定一个绝对宽度才能使其工作。

                android:layout_width="100dip"
                

                android:layout_width="fill_parent"
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2021-01-19
                  • 2014-02-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多