一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

鴻蒙ArkTS+ArkUI仿微信通訊錄頁面制作【2】

張越 ? 來源:jf_51656278 ? 作者:jf_51656278 ? 2025-07-01 11:45 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

繼續(xù)先放一下效果圖

然后繼續(xù)上一篇文章的內(nèi)容,上一次我們講到如何去獲取每個人名字的第一個字,接下來講一下如何設(shè)置每個名字之前的那個圓的背景色
先放一下代碼:

getAvatarColor(name:string):string{
    const colors = [
      '#FF9AA2', '#FFB7B2', '#FFDAC1', '#E2F0CB', '#B5EAD7',
      '#C7CEEA', '#A8E6CF', '#FFD3A5', '#FD9644', '#9BB5FF',
      '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9', '#F8C471'
    ];
    const index = name.charCodeAt(0) % colors.length;
    return colors[index];
  }

name.charCodeAt(0) 方法用于獲取 name 字符串的第一個字符的 Unicode 編碼。例如,如果 name 是 "Apple",那么 name.charCodeAt(0) 將返回字符 'A' 的 Unicode 編碼(65)。
colors.length 表示 colors 數(shù)組的長度,這里是 15。
% 是取模運算符,用于計算 name.charCodeAt(0) 除以 colors.length 的余數(shù)。這個余數(shù)將作為 colors 數(shù)組的索引,確保索引值在 0 到 colors.length - 1 的范圍內(nèi)。例如,如果 name.charCodeAt(0) 是 65,colors.length 是 15,那么 65 % 15 的結(jié)果是 5,這意味著 index 的值為 5。所以說,每一個字符都能找到其專屬的一個顏色,而不用搞隨機數(shù),也能保證視覺效果的一致性。

然后要先設(shè)置基本的UI,通過List + ListItemGroup + ListItem來實現(xiàn),一般項目里我們很少用到ListItemGroup,但是因為這里我們在滾動的時候,是按照首字母為一個組進行滾動的,并且每一組上面都有一個字母作為“標題”,所以使用ListItemGroup更加方便,代碼如下:

List({scroller:this.scroller}){
          //聯(lián)系人列表
          ForEach(this.contactListArr,(val:Contact)= >{
            ListItemGroup({header:this.HeaderGroupItem(val.group)}){
              ForEach(val.namesList,(name:string)= >{
                ListItem(){
                  Row(){
                    //頭像
                    Column(){
                      Text(this.getInitial(name))
                        .fontSize(16)
                        .fontWeight(FontWeight.Medium)
                        .fontColor('#ffffff')
                    }.width(45).height(45).backgroundColor(this.getAvatarColor(name)).borderRadius(22.5).justifyContent(FlexAlign.Center).margin({right:16}).shadow({
                      radius:4,color:'#00000015',offsetX:0,offsetY:2
                    })
                    //姓名
                    Text(name)
                      .fontSize(16)
                      .fontColor('#1a1a1a')
                      .layoutWeight(1)
                    //右箭頭
                    Text(' >')
                      .fontSize(16)
                      .fontColor('#c7c7cc')
                  }.width('100%').padding({left:20,right:20,top:12,bottom:12}).alignItems(VerticalAlign.Center).backgroundColor('#ffffff').onClick(()= >{
                    console.log(`點擊了聯(lián)系人: ${name}`)
                  })
                }
              })
            }
          })
        }.backgroundColor('#f5f5f5').divider({
          strokeWidth:0.5,color:'#f0f0f0',startMargin:81,endMargin:20
        }).onScrollIndex((start)= >{
          this.currentIndex = start;
        }).layoutWeight(1)

接下來是AlphabetIndexer組件,我們先貼一下代碼,然后再詳細講解里面的各個屬性

AlphabetIndexer({arrayValue:this.alphabets,selected:this.currentIndex})
          .autoCollapse(false)
          .selectedColor('#007AFF')
          .itemSize(20)
          .popupBackground('#ffffff')
          .usingPopup(true)
          .alignStyle(IndexerAlign.Right)
          .popupFont({size:24,weight:FontWeight.Medium})
          .selectedFont({size:14,weight:FontWeight.Medium})
          .font({size:12})
          .itemBorderRadius(10)
          .popupPosition({x:30,y:0})
          .margin({right:12})
          .popupItemBorderRadius(8)
          .popupSelectedColor('#007AFF')
          .popupUnselectedColor('#8e8e93')
          .onSelect((index)= >{
            this.scroller.scrollToIndex(index)
          })

autoCollpase是是否自適應(yīng)折疊模式,在api12以后,這個值默認為true,即自適應(yīng)折疊模式,因為我們現(xiàn)在是26個英文字母,所以按照文檔里的說法,是會默認折疊的。
usingPopup代表的是是否默認顯示彈窗,也就是比如說你點了右邊的A以后,會有一個彈窗來顯示你當前點擊的是“A”
popupPosition就是代表的這個彈窗的位置,具體位置是相對于索引條上邊框中點的位置。但是這里和普通的position有點不太一樣……普通的坐標軸是往左往上是負值,這里的是往左和往下是正值
然后是onSelect,也就是選中后,那么讓滾動的控制器滾動到對應(yīng)的ListItemGroup即可,因為26個英文字母都有自己對應(yīng)的Group
最后,要注意這個List組件和AlphabetIndexer組件需要放在同一個stack組件里,采用堆疊容器

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Unicode
    +關(guān)注

    關(guān)注

    0

    文章

    25

    瀏覽量

    12735
  • 鴻蒙
    +關(guān)注

    關(guān)注

    60

    文章

    2617

    瀏覽量

    44028
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    鴻蒙ArkTS+ArkUI仿消息列表頁制作

    ? 先放一下頁面效果: 第一步我們先定義一下數(shù)據(jù)格式,創(chuàng)建一個數(shù)據(jù)模型,通過圖片,可以看到每一條數(shù)據(jù)的字段應(yīng)當包括:頭像,姓名,最新消息內(nèi)容和最新消息的時間,創(chuàng)建一個model文件夾,然后在里面新建
    發(fā)表于 06-30 18:28

    仿登錄頁面制作

    還涉及到一個TextInput占位符的問題,可以從頁面中看到,占位符的顏色明顯和旁邊的文字顏色不同,那么如果直接設(shè)置fontColor的話,設(shè)置的是輸入的文字的顏色而不是占位符的顏色,對于
    發(fā)表于 06-30 18:25

    ArkUI介紹

    ArkUI(方舟UI框架)為應(yīng)用的UI開發(fā)提供了完整的基礎(chǔ)設(shè)施,包括簡潔的UI語法、豐富的UI功能(組件、布局、動畫以及交互事件),以及實時界面預(yù)覽工具等,可以支持開發(fā)者進行可視化界面開發(fā)
    發(fā)表于 06-24 06:41

    ArkUI-X平臺橋接Bridge說明

    傳遞數(shù)據(jù),如傳遞JSON數(shù)據(jù)、圖片等; 2、ArkUI側(cè)調(diào)用平臺的API,如獲取Android或iOS平臺上的電池電量、復(fù)用平臺上的三方庫等; 3、平臺調(diào)用ArkUI側(cè)的方法,如復(fù)用JavaScript
    發(fā)表于 06-19 23:12

    ArkUI-X跨平臺技術(shù)落地-華為運動健康(一)

    的設(shè)計策略: 1.運動健康首頁歷史邏輯復(fù)雜,涉及的模塊多并且改造包袱重,仍使用原生頁面native開發(fā)技術(shù)。 2.在運動健康內(nèi)部的二級頁面(如心臟健康、睡眠等頁面)使用
    發(fā)表于 06-18 22:53

    ArkUI-X與Android聯(lián)動編譯開發(fā)指南

    ArkTS產(chǎn)物到Android工程中。 其功能主要包括: 1.手動配置編譯ArkTS源碼開關(guān) 2.手動配置編譯module 3.手動配置文件輸出路徑 編譯配置說明 配置編譯ArkTS
    發(fā)表于 06-16 22:55

    鴻蒙5開發(fā)寶藏案例分享---Web頁面內(nèi)點擊響應(yīng)時延分析

    鴻蒙Web性能優(yōu)化寶藏指南!那些官方?jīng)]明說的實戰(zhàn)技巧 各位鴻蒙開發(fā)者好!最近在排查Web頁面卡頓時,意外在HarmonyOS開發(fā)者文檔里挖到性能優(yōu)化的寶藏案例!這些實戰(zhàn)經(jīng)驗藏在「應(yīng)用質(zhì)量 &
    發(fā)表于 06-12 17:09

    ArkUI-X添加到現(xiàn)有Android項目中

    本教程主要講述如何利用ArkUI-X SDK完成Android AAR開發(fā),實現(xiàn)基于ArkTS的聲明式開發(fā)范式在android平臺顯示。包括: 1.跨平臺Library工程開發(fā)介紹 2.AAR在
    發(fā)表于 06-04 22:35

    ArkUI-X添加到現(xiàn)有Android項目中

    本教程主要講述如何利用ArkUI-X SDK完成Android AAR開發(fā),實現(xiàn)基于ArkTS的聲明式開發(fā)范式在android平臺顯示。包括: 1.跨平臺Library工程開發(fā)介紹 2.AAR在
    發(fā)表于 05-28 22:44

    Get這個秘籍,鴻蒙原生應(yīng)用頁面滑動絲滑無比

    鴻蒙應(yīng)用開發(fā)中,部分應(yīng)用頁面在滑動時會出現(xiàn)白塊或白屏的問題,不僅困擾開發(fā)者,還直接影響用戶體驗。針對這一痛點,華為近期分別推出了針對鴻蒙原生應(yīng)用ArkUI
    發(fā)表于 03-06 14:41

    HarmonyOS NEXT 原生應(yīng)用開發(fā):社交通訊錄界面實現(xiàn)

    一、案例想法 本DEMO展示了如何在HarmonyOS NEXT平臺上,使用ArkTS開發(fā)語言構(gòu)建一個簡單的社交通訊錄界面。用戶可以在此界面上瀏覽聯(lián)系人列表,每個聯(lián)系人條目包含姓名、電話號碼以及一個
    發(fā)表于 01-09 14:37

    鴻蒙原生開發(fā)手記:01-元服務(wù)開發(fā)

    簡介 元服務(wù)是鴻蒙中的一種輕量應(yīng)用形態(tài),無需下載,直接運行。類似于小程序,但與小程序不同的是,元服務(wù)更加輕量。 元服務(wù)使用原生開發(fā),是系統(tǒng)級提供的,無論從易用性、性能、體驗上,都要比小程序好
    發(fā)表于 11-14 17:28

    鴻蒙系統(tǒng)專用版信內(nèi)測即將啟動

    近日,有知情人士稱鴻蒙系統(tǒng)專用版的開發(fā)工作現(xiàn)已基本完成。這一消息標志著在適配鴻蒙系統(tǒng)方面
    的頭像 發(fā)表于 11-07 10:58 ?1493次閱讀

    鴻蒙Flutter實戰(zhàn):06-使用ArkTs開發(fā)Flutter鴻蒙插件

    # 使用 ArkTs 開發(fā) Flutter 鴻蒙平臺插件 本文講述如何開發(fā)一個 Flutter 鴻蒙插件,如何實現(xiàn) Flutter 與鴻蒙的混合開發(fā),以及雙端消息通信。 ## Fl
    發(fā)表于 10-22 21:56

    基于鴻蒙Next模擬電話通訊錄及電話撥打

    一、介紹 基于鴻蒙Next模擬電話通訊錄,可以撥打電話,刪除電話等二、場景需求 客戶服務(wù)、業(yè)務(wù)咨詢、回訪處理、溝通交流、信息交流等等 三、業(yè)務(wù)步驟 第一步:點擊撥打點電話,先判斷設(shè)備是否具備通訊能力
    發(fā)表于 08-27 15:24