返回

巧用TextView,"查看更多"取代自带省略号,实现优雅展开动画

Android

前言

作为一名技术博客创作专家,我常以独特的视角审视事物,并在此基础上构建文章。这次,我们把目光投向Android中常见的TextView,探讨如何巧妙地用"查看更多"替代自带的省略号,同时实现一个高效且优雅的展开折叠动画。

TextView的默认省略方式

Android TextView提供了ellipsize属性来处理文本超出显示范围的情况。它支持两种常用的省略方式:

  1. END: 从文本末尾开始省略
  2. MIDDLE: 从文本中间开始省略

然而,这两种方式都有其局限性:

  • END:省略后文本不完整,用户无法得知省略的内容
  • MIDDLE:省略后文本前后不完整,影响阅读体验

"查看更多"的优势

相比之下,"查看更多"更具用户友好性:

  • 完整性: 保留了原文内容,不会因省略而丢失信息
  • 可控性: 用户可以主动控制文本展开或折叠
  • 美观性: "查看更多"作为一种自定义文本,可以与应用整体风格相匹配

实现步骤

1. 布局设置

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="这是一段很长的文本,需要省略以适应屏幕宽度。" />

    <TextView
        android:id="@+id/btn_toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查看更多" />

</LinearLayout>

2. Java代码

TextView textView = findViewById(R.id.text_view);
TextView btnToggle = findViewById(R.id.btn_toggle);

// 设置最大行数
textView.setMaxLines(2);
// 设置省略方式为END
textView.setEllipsize(TruncateAt.END);

// 设置"查看更多"按钮的点击事件
btnToggle.setOnClickListener(v -> {
    if (textView.getMaxLines() == 2) {
        // 展开文本
        textView.setMaxLines(Integer.MAX_VALUE);
        btnToggle.setText("收起");
    } else {
        // 折叠文本
        textView.setMaxLines(2);
        btnToggle.setText("查看更多");
    }
});

3. 动画效果

为了让展开和折叠动画更流畅,可以添加动画代码:

// 展开动画
textView.animate()
    .alpha(1)
    .setDuration(300)
    .setInterpolator(new AccelerateDecelerateInterpolator())
    .start();

// 折叠动画
textView.animate()
    .alpha(0)
    .setDuration(300)
    .setInterpolator(new AccelerateDecelerateInterpolator())
    .start();

总结

通过巧妙地使用"查看更多",我们不仅解决了TextView省略带来的问题,还实现了优雅的展开折叠动画。这种方法可以广泛应用于各种场景,为用户提供更友好、更具交互性的阅读体验。