【问题标题】:How to exactly do Read More in an Android TextView?如何在 Android TextView 中准确阅读更多内容?
【发布时间】:2021-05-06 08:43:15
【问题描述】:

问题:如何淡出最后一行的末尾并在 TextView 中附加 Read More 文本?

参见:

就像在这篇文章中一样,我想在描述即将结束时附加阅读更多文本,并且您还可以注意到一些文本是模糊的、不可见的。我想要所有这些。

我尝试了一些答案,但答案不同。

我想要这样,最后我想附加“阅读更多”

我知道这个问题有答案: How to fade out the end of the last line in a TextView?

但这个答案对我不起作用。

我的目的是在单击 Read More 时不展开 texview,而是打开新活动。

【问题讨论】:

标签: android


【解决方案1】:

answer 存在一些问题。我稍微改了一下:

public class FadingTextView extends android.support.v7.widget.AppCompatTextView {

private static final double FADE_LENGTH_FACTOR = 1.5;

private final Shader shader;
private final Matrix matrix;
private final Paint paint;
private final Rect bounds;

public FadingTextView(Context context) {
    this(context, null);
}

public FadingTextView(Context context, AttributeSet attrs) {
    this(context, attrs, android.R.attr.textViewStyle);
}

public FadingTextView(Context context, AttributeSet attrs, int defStyleAttribute) {
    super(context, attrs, defStyleAttribute);

    matrix = new Matrix();
    paint = new Paint();
    bounds = new Rect();
    shader = new LinearGradient(0f, 0f, 1f, 0f, 0, 0xFF000000, Shader.TileMode.CLAMP);
    paint.setShader(shader);
    paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OUT));
}

@Override
protected void onDraw(Canvas canvas) {
    // Locals
    final Matrix m = matrix;
    final Rect b = bounds;
    final Layout l = getLayout();

    // Last line index
    final int line = getLineCount() - 1;

    // Determine text direction
    final boolean isRtl = l.getParagraphDirection(line) == Layout.DIR_RIGHT_TO_LEFT;

    // Last line bounds
    getLineBounds(line, b);

    // Adjust end bound to text length
    final int lineStart = l.getLineStart(line);
    final int lineEnd = l.getLineEnd(line);
    final CharSequence text = getText().subSequence(lineStart, lineEnd);
    final int measure = (int) (getPaint().measureText(text, 0, text.length()) + .5f);

    final int fadeLength = (int) (b.width() / FADE_LENGTH_FACTOR);


    // Save the layer
    final int saveCount = canvas.saveLayer(b.left, 0, b.right,
            b.bottom, null,
            Canvas.ALL_SAVE_FLAG);

    // Let TextView draw itself
    super.onDraw(canvas);

    // Adjust and set the Shader Matrix
    m.reset();
    m.setScale(fadeLength, 1f);
    if (isRtl) {
        m.postRotate(180f, fadeLength / 2f, 0f);
    }
    m.postTranslate(b.left, 0f);
    shader.setLocalMatrix(matrix);

    // Finally draw the fade
    canvas.drawRect(b, paint);

    canvas.restoreToCount(saveCount);
}
}

文本视图

 <com.example.FadingTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#e2f3eb"
        android:ellipsize="end"
        android:maxLines="3"
        android:text="Lorem ipsum dolor....."
        android:textColor="#0b8043" />

阅读更多:

<TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignEnd="@+id/post_desc"
        android:layout_alignBottom="@+id/post_desc"
        android:layout_marginEnd="0dp"
        android:layout_marginBottom="0dp"
        android:background="@android:color/transparent"
        android:text="Read More"/>

FADE_LENGTH_FACTOR = 1

FADE_LENGTH_FACTOR = 1.5

【讨论】:

  • 等等,,,让我实现亲爱的
  • 好的,我试过你的答案,比原来的问题好,但我的动机还没有完成。好的淡出正在工作,但我想附加阅读更多,就像我发布了一张 Quora 帖子图片一样。正是我想要的。并确保点击阅读更多 Ive 打开新活动
  • 您应该相应地进行设计。我在一个 FrameLayout 中使用了两个 textView。
  • 我知道我们可以使用 textview 但我的问题是它应该如何与最后一行重叠?在这里查看我的布局:drive.google.com/open?id=1WQr4DEuOzm0xS3O_idovVEEi9K-qu8kA
  • 在同一个链接中查看,我添加并测试了 textview,但无法正常工作
猜你喜欢
  • 1970-01-01
  • 2019-07-17
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
相关资源
最近更新 更多