HarmonyOS Text搜索关键字高亮功能

搜索关键字,Text匹配到的部分高亮。

HarmonyOS
2024-10-08 10:32:01
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zxjiu

demo如下:

class Tmp {  
  a: MutableStyledString  
  b: TextController  
  c: string  
  constructor(a: MutableStyledString, b: TextController, c: string) {  
    this.c = c  
    this.a = a  
    this.b = b  
  }  
};  
@Entry  
@Component  
struct Page240108114409062 {  
  @State searchValue: string = '';  
  @State dataArr: string[] = [  
    "diyi第一段a数据",  
    "第二段ab数据",  
    "第三段b数据",  
    "第四d段数据",  
    "第五cd段数据",  
    "第六段数据"  
  ]  
  @State showArr: Tmp[] = []  
  count: number = 0  
  fontStyleAttr1: TextStyle = new TextStyle({ fontColor: Color.Red });  
  fontStyleAttr2: TextStyle = new TextStyle({ fontColor: Color.Blue });  
  mutableStyledString2: MutableStyledString = new MutableStyledString("test hello world", [{  
    start: 0,  
    length: 5,  
    styledKey: StyledStringKey.FONT,  
    styledValue: this.fontStyleAttr1  
  }]);  
  controller3: TextController = new TextController();  
  build() {  
    Row() {  
      Column() {  
        Search({ value: $$this.searchValue, placeholder: 'Type to search...' })  
          .searchButton('SEARCH')  
          .width('90%')  
          .height(40)  
          .backgroundColor('#F5F5F5')  
          .placeholderColor(Color.Grey)  
          .placeholderFont({ size: 14, weight: 400 })  
          .textFont({ size: 14, weight: 400 })  
          .margin(20)  
          .onChange(() => {  
            this.showArr = []  
            this.controller3.setStyledString(this.mutableStyledString2)  
            this.dataArr.filter((item: string) => {  
              let index = item.indexOf(this.searchValue)  
              if (this.searchValue && index != -1) {  
                // MutableStyledString 要高亮的是列表,多关键字匹配的场景在里面加属性就可以  
                let mutableStyledString = new MutableStyledString(item, [{  
                  start: index,  
                  length: this.searchValue.length,  
                  styledKey: StyledStringKey.FONT,  
                  styledValue: this.fontStyleAttr1  
                },  
                  {  
                    start: item.length - 1,  
                    length: 1,  
                    styledKey: StyledStringKey.FONT,  
                    styledValue: this.fontStyleAttr2  
                  }])  
                let controller = new TextController()  
                this.count += 1  
                this.showArr.push(new Tmp(mutableStyledString, controller, this.count.toString()))  
                console.log("mutableStyledString comntent:" + mutableStyledString.getString() + this.showArr.length);  
              }  
            })  
          })  
        ForEach(this.showArr, (item: Tmp) => {  
          ListItem() {  
            Row() {  
              Text(undefined, { controller: item.b })  
                .onAppear(() => {  
                  item.b.setStyledString(item.a)  
                })  
            }.width("100%").height(40).justifyContent(FlexAlign.Center)  
          }  
        }, (item: Tmp) => item.c)  
      }  
      .width('100%')  
    }  
    .height('100%')  
  }  
}
分享
微博
QQ
微信
回复
2024-10-08 16:10:30
相关问题
HarmonyOS 如何在Text中做搜索高亮?
163浏览 • 1回复 待解决
数据库入表时无法使用内建关键字
1696浏览 • 1回复 待解决
Text匹配文字高亮显示
776浏览 • 1回复 待解决
Java Text控件,如何设置间距?
6870浏览 • 1回复 待解决
Text控件使用第三方的文档
697浏览 • 1回复 待解决
Text如何实现删除线的功能
802浏览 • 1回复 待解决
HarmonyOS BLE 搜索、连接、断开等问题
474浏览 • 1回复 待解决
Search搜索框如何配置?
379浏览 • 1回复 待解决
HarmonyOS 经典蓝牙的搜索问题
295浏览 • 1回复 待解决