ListView --- transcriptMode 选项

本文介绍如何在Android ListView中实现消息自动滚动至最新一条的功能,通过设置transcript模式为AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL,可以确保新添加的item始终显示在屏幕底部,类似于QQ/微信聊天中的自动滚动效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载自 https://blog.youkuaiyun.com/natloc/article/details/50850099

默认情况下,当添加的 Item 超出 ListView 的范围后,ListView 并没有刷新让最新一条显示出来。而在 qq/微信 聊天中,发新的消息后会自动滚动显示出最下面的一条信息。

调用方式

  • AbsListView.java:
    public int getTranscriptMode()   // 用于查询当前的 transcript 模式
        void setTranscriptMode(int mode)   // 用于设置 transcript 模式
          AbsListView.TRANSCRIPT_MODE_DISABLED    // 禁用
          AbsListView.TRANSCRIPT_MODE_NORMAL   // 正常状态
          AbsListView.TRANSCRIPT_MODE_ALWAYS_SCROLL   // 总是滚动到最新一条

      布局文件设置

          <ListView android:id="@+id/lv_test"
              android:layout_width="match_parent"
              android:layout_height="300dp"
              <!-- 以下模式只能选一种 -->
              android:transcriptMode="normal"
              android:transcriptMode="disabled"
              android:transcriptMode="alwaysScroll"
              >
      

      源码分析

      • 获取当前模式:
          /**
           * Returns the current transcript mode.
           *
           * @return {@link #TRANSCRIPT_MODE_DISABLED}, {@link #TRANSCRIPT_MODE_NORMAL} or
           *         {@link #TRANSCRIPT_MODE_ALWAYS_SCROLL}
           */
      
      • 设置模式:
      /**
           * Puts the list or grid into transcript mode. In this mode the list or grid will always scroll
           * to the bottom to show new items.
           *
           * @param mode the transcript mode to set
           *
           * @see #TRANSCRIPT_MODE_DISABLED
           * @see #TRANSCRIPT_MODE_NORMAL
           * @see #TRANSCRIPT_MODE_ALWAYS_SCROLL
           */
          public void setTranscriptMode(int mode) {
              mTranscriptMode = mode;
          }
      
      
      • 效果图:
        • disable 状态:
          这里写图片描述
        • normal 状态:
          这里写图片描述
        • always 状态:
          这里写图片描述
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

      当前余额3.43前往充值 >
      需支付:10.00
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

      1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
      2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

      余额充值