目录

TextReaderIcon(朗读听筒图标)

朗读听筒图标,可以作为动态组件加载,并配置成为播放面板的主入口。

起始版本: 5.0.0(12)

导入模块

import { TextReaderIcon } from '@kit.SpeechKit';

TextReaderIcon

朗读听筒图标,可以作为动态组件加载。设置onClick回调,在用户点击听筒图标时启动朗读控件。

装饰器类型: @Component

元服务API: 从版本5.0.3(15)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.AI.Component.TextReader

模型约束: 此接口仅可在Stage模型下使用。

起始版本: 5.0.0(12)

参数:

名称 类型 必填 装饰器类型 说明
readState ReadStateCode 是 @Link

播报状态。

说明:

readState使用@Link装饰器:父子双向同步。

[h2]build

build(): void

用于创建TextReaderIcon对象的构造函数。

元服务API: 从版本5.0.3(15)开始,该接口支持在元服务中使用。

系统能力: SystemCapability.AI.Component.TextReader

模型约束: 此接口仅可在Stage模型下使用。

起始版本: 5.0.0(12)

示例:

import { TextReader, TextReaderIcon, ReadStateCode } from '@kit.SpeechKit';

@Entry
@Component
struct Index {

  /**
   * 待加载的文章
   */
  @State readInfoList: TextReader.ReadInfo[] = [];
  @State selectedReadInfo: TextReader.ReadInfo = this.readInfoList[0];

  /**
   * 播放状态
   */
  @State readState: ReadStateCode = ReadStateCode.WAITING;

  /**
   * 初始化状态
   */
  @State isInit: boolean = false;

  async aboutToAppear(){
    /**
     * 加载数据
     */
    let readInfoList: TextReader.ReadInfo[] = [{
      id: '001',
      title: {
        text:'水调歌头.明月几时有',
        isClickable:true
      },
      author:{
        text:'宋.苏轼',
        isClickable:true
      },
      date: {
        text:'2024/01/01',
        isClickable:false
      },
      bodyInfo: '明月几时有?把酒问青天。'
    }];
    this.readInfoList = readInfoList;
    this.selectedReadInfo = this.readInfoList[0];
    await this.init();
  }

  /**
   * 初始化
   */
  async init() {
    const readerParam: TextReader.ReaderParam = {
      isVoiceBrandVisible: true,
      businessBrandInfo: {
        panelName: '小艺朗读',
        panelIcon: $r('app.media.startIcon')
      }
    };
    try {
      let context: Context | undefined = this.getUIContext().getHostContext();
      if (context) {
        await TextReader.init(context, readerParam);
        this.isInit = true;
      }
    } catch (err) {
      console.error(`TextReader failed to init. Code: ${err.code}, message: ${err.message}`);
    }
  }

  // 设置操作监听
  setActionListener() {
    TextReader.on('stateChange', (state: TextReader.ReadState) => {
      this.onStateChanged(state);
    });
      TextReader.on('requestMore', () => {
      TextReader.loadMore([], true);
    });
  }

  onStateChanged = (state: TextReader.ReadState) => {
    if (this.selectedReadInfo?.id === state.id) {
      this.readState = state.state;
    } else {
      this.readState = ReadStateCode.WAITING;
    }
  };

  build() {
    Column() {
      TextReaderIcon({ readState: this.readState })
        .margin({ right: 20 })
        .width(32)
        .height(32)
        .onClick(async () => {
          try {
            this.setActionListener();
            await TextReader.start(this.readInfoList, this.selectedReadInfo?.id);
          } catch (err) {
            console.error(`TextReader failed to start. Code: ${err.code}, message: ${err.message}`);
          }
        })
    }
    .height('100%')
  }
}

组件如下图:

静止状态

播放状态