【问题标题】:Android TextView SingleLine field hides long textAndroid TextView SingleLine 字段隐藏长文本
【发布时间】:2014-08-11 15:34:31
【问题描述】:

我有一个 TextView,它位于屏幕的左侧,设置为 Gravity="right",并且设置为 SingleLine = "true"。

如果这个视图中的文本变得太长,我希望它从视图的左侧消失。我认为下面的配置会做到这一点,但实际发生的是长字符串完全消失了,大概是在某个地方的视图之外。

如何创建一个包含单行文本的简单文本视图,即使发生意外情况也能保持其布局? ...甚至是可以预测的东西。

<TextView
    android:id="@+id/tempF"
    android:text="@string/tempF"
    android:layout_width="146dp"
    android:layout_height="wrap_content"
    android:textColor="#cccccc"
    android:textStyle="bold"
    android:textSize="92dp"
    android:fontFamily="serif"
    android:gravity="right"
    android:layout_marginTop="60dp"
    android:layout_gravity="top|left"
    android:singleLine="true"
    />

【问题讨论】:

  • 仅用于记录 singleLine 已弃用。使用 maxLines="1"。
  • 只是为了记录²:结合 ellipsize=middle 和 maxLines=1 可能会导致崩溃。请改用 singleLine=true。

标签: android xml textview word-wrap


【解决方案1】:

这就是“省略号”的目的——截断部分文本以指示附加文本。

在您的情况下,您可能只需要添加如下内容:

android:ellipsize="end"

或者你可能需要更深入:

Automatically ellipsize a string in Java

或者看看这个:

android ellipsize multiline textview

扩展类背后的想法是,当文本内容超出提供的空间时,您可以自定义 TextView 的行为。例如,您可以通过删除填充等来赋予它“溢出”的外观。省略号是一种指示符,通常用于解释“还有更多您看不到的文本” - 这就是它的外观:

这真的很长……

(这 3 个句点是省略号 - 您的文本方向相反,但它应该仍然有效)

使用自定义 TextView,您可以将“...”更改为任何内容或您想要的任何其他内容(甚至是图像,我已经这样做了)。

你也可以选中文本:

TextView Marquee not working

【讨论】:

  • 我真的很感激这个答案,但我可以看到这个概念行不通。 android:ellpsize 的所有变体都具有相同的结果,但即使它们没有椭圆的外观也只会比我所拥有的任何东西略好一点。我必须据此假设,我可能需要使视图超出屏幕边缘并希望获得最好的结果。
  • 是的,这似乎是唯一的方法。对我来说似乎不太犹太,但无论如何。 android:layout_width="500dp" android:layout_marginLeft="-350dp"
  • 看看我修改过的评论。您可能需要自定义 TextView。或者使用选框可能会有所帮助。滚出屏幕可能会做一些不可预知的事情。
  • 是的,这很可能是更整洁的解决方案。谢谢你的主意。 IMO这是一个不应该存在的问题,但至少它是一个有解决方案的问题。谢谢。
【解决方案2】:

在 xml 中添加 2 个属性

android:singleLine="true"

android:ellipsize="end"

【讨论】:

    【解决方案3】:

    你应该使用 TextView 的 ellipsize 属性。检查如下:

    <TextView
        android:id="@+id/tempF"
        android:text="@string/tempF"
        android:layout_width="146dp"
        android:layout_height="wrap_content"
        android:textColor="#cccccc"
        android:textStyle="bold"
        android:textSize="92dp"
        android:fontFamily="serif"
        android:gravity="right"
        android:layout_marginTop="60dp"
        android:layout_gravity="top|left"
        android:singleLine="true"
        android:ellipsize="end"
        />
    

    【讨论】:

      【解决方案4】:
      <TextView
          android:id="@+id/tv_desc"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:textColor="@color/colorGray"
          android:textSize="@dimen/_18dp"
          android:padding="@dimen/_2dp"
          android:singleLine="true"
          android:ellipsize="end"
          android:text="@string/desc" />
      

      【讨论】:

        【解决方案5】:

        因为android:singleLine 已被弃用。我们可以使用这条线android:maxLines

        可以这样。

        android:ellipsize="end"
        android:maxLines="1"
        

        【讨论】:

          【解决方案6】:
          <View
              android:layout_width="match_parent"
              android:layout_height="1dp"
              android:background="#000000" />
          

          有效。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-09-05
            • 1970-01-01
            • 1970-01-01
            • 2014-03-18
            • 2011-01-19
            • 1970-01-01
            相关资源
            最近更新 更多