gpt4 book ai didi

Android 文本在固定高度 TextView 上被截断

转载 作者:行者123 更新时间:2023-12-03 16:39:16 24 4
gpt4 key购买 nike

考虑这种布局:

<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="160dp"
android:textSize="20sp"
android:text="Apple Inc. is an American multinational technology company headquartered in Cupertino, California, that designs, develops, and sells consumer electronics, computer software, and online services."
android:ellipsize="end"
android:gravity="top"/>
我想要 TextView 做的是弄清楚它可以在 160dp 中容纳多少行,如果空间不够,则放置三个点。然而,文本被截断:
enter image description here
我怎样才能实现上述行为?我假设我可以通过在布局资源文件上指定一些属性来做到这一点。谢谢。

最佳答案

没有办法通过简单地在布局资源文件上指定属性来实现这一点。

如果您查看 setEllipsize() TextView 中的方法,你会看到它说:

Causes words in the text that are longer than the view's width to be ellipsized instead of broken in the middle. You may also want to setSingleLine() or setHorizontallyScrolling(boolean) to constrain the text to a single line. Use null to turn off ellipsizing. If setMaxLines(int) has been used to set two or more lines, only TextUtils.TruncateAt.END and TextUtils.TruncateAt.MARQUEE are supported (other ellipsizing types will not do anything).



从该文档中,您可以在 TextView 中看到省略号。实际上高度依赖于两个因素: View 宽度 行数 .

因此,我记得省略号可能不会出现在 TextView 中。如果它不知道您的 TextView 的最大行数可以有。

因此,对于您的预期行为,这是不可能的,因为您依赖于 View 的高度。您想使用特定高度,然后让 TextView 计算可以在该高度内显示的行数。最后,如果所需的行数大于显示的数量,则需要显示省略号。

那是... TextView 中的省略号是不可能的被编码。它根本不是为了那个。

因此,如果您想要这种行为,您需要:
  • 创建自定义TextView为您的特定省略号实现
  • 手动计算可见行数,然后使用 setMaxLines()在那TextView

  • 对于第二个选项,您可以使用 TextView 进行计算。方法 getHeight()getLineHeight() .

    例如:
    textview = (TextView) findViewById(R.id.exampleTextView);

    textview.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
    final int maxLines = textview.getHeight() / textview.getLineHeight();
    textview.setMaxLines(maxLines);
    }
    });

    在我的示例中,我在 ViewTreeObserver 中执行此操作避免 getHeight()调用大小为 0。

    第二个选项应该能够获得您想要的行为,但是如果您希望每个 TextView ,您应该考虑创建自定义 TextView反而。

    关于Android 文本在固定高度 TextView 上被截断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55346665/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com