介紹
本示例介紹城市選擇場景的使用:透過AlphabetIndexer實現首字母快速定位城市的索引條導航。
效果圖預覽
使用說明
分兩個功能
- 在搜尋框中可以根據城市拼音模糊搜尋出相近的城市,例如輸入"a",會出現"阿爾山"、"阿勒泰地區"、"安慶"、"安陽"。
- 下方城市列表透過AlphabetIndexer元件實現拼音索引條,透過滑動選擇城市首拼,快速定位相關首拼城市。
實現思路
場景:透過AlphabetIndexer實現索引條導航
城市列表中的右側首拼索引條,透過AlphabetIndexer元件實現首字母快速定位城市的索引條導航。
- 透過AlphabetIndexer的selected屬性與城市列表中List元件onScrollIndex事件繫結,原始碼參考
AlphabetIndexer({ arrayValue: TAB_VALUE, selected: this.stabIndex })
.height('100%')
.selectedColor($r('app.color.alphabet_select_color')) // 選中項文字顏色
.popupColor($r('app.color.alphabet_pop_color')) // 彈出框文字顏色
.selectedBackgroundColor($r('app.color.alphabet_selected_bgc')) // 選中項背景顏色
.popupBackground($r('app.color.alphabet_pop_bgc')) // 彈出框背景顏色
.popupPosition({ x: $r('app.integer.pop_position_x'), y: $r('app.integer.pop_position_y') })
.usingPopup(true) // 是否顯示彈出框
.selectedFont({ size: $r('app.integer.select_font'), weight: FontWeight.Bolder }) // 選中項字型樣式
.popupFont({ size: $r('app.integer.pop_font'), weight: FontWeight.Bolder }) // 彈出框內容的字型樣式
.alignStyle(IndexerAlign.Right) // 彈出框在索引條左側彈出
.onSelect((tabIndex: number) => {
this.scroller.scrollToIndex(tabIndex);
})
- 當使用者滑動List元件,list元件onScrollIndex監聽到firstIndex的改變,繫結賦值給AlphabetIndexer的selected屬性,從而定位到字母索引。
- 當點選AlphabetIndexer的字母索引時,透過scrollToIndex觸發list元件滑動並指定firstIndex,從而實現List列表與AlphabetIndexer元件首字母聯動吸頂展示,原始碼參考。
List({ space: 14, initialIndex: 0, scroller: this.scroller }) {
.onScrollIndex((firstIndex: number, lastIndex: number) => {
this.stabIndex = firstIndex;
})
}
高效能知識點
由於需要透過搜尋按鈕頻繁的控制自定義元件的顯隱狀態,原始碼詳見,因此推薦使用顯隱控制替代條件渲染,參考合理選擇條件渲染和顯隱控制文章。
工程結構&模組型別
citysearch // har型別
|---src/main/ets/view
| |---CitySearch.ets // 檢視層-主頁
| |---CityView.ets // 檢視層-城市列表元件
| |---SearchView.ets // 檢視層-搜尋元件
|---src/main/ets/model
| |---DetailData.ets // 模型層-資料模組
模組依賴
依賴har包-common庫中UX標準
參考資料
AlphabetIndexer參考文件
寫在最後
- 如果你覺得這篇內容對你還蠻有幫助,我想邀請你幫我三個小忙:
- 點贊,轉發,有你們的 『點贊和評論』,才是我創造的動力。
- 關注小編,同時可以期待後續文章ing🚀,不定期分享原創知識。
- 想要獲取更多完整鴻蒙最新VIP學習資源,請移步前往小編:
https://qr21.cn/FV7h05