HarmonyOS 鸿蒙Next 区号选择Demo

发布于 1周前 作者 sinazl 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 区号选择Demo

手机号登录需要选择区号,支持右侧按A-Z 快速滑动,有没有这种demo?

2 回复
可以参考此demo

class Contacts {
  constructor(index: string, names: string[]) {
    this.index = index
    this.names = names
  }
  index: string // 序号
  names: string[] // 姓名组
}
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
  [@State](/user/State) contacts: Contacts[] = [
    new Contacts('A', ["安倍", "安东", "安老师"]),
    new Contacts('B', ["白宇", "贝多芬", "薄熙来"]),
    new Contacts('C', ["陈虎", "常识", "池早早"]),
    new Contacts('D', ["但达", "邓紫", "蒂菲尔"]),
    new Contacts('E', ["尔康", "儿子"]),
    new Contacts('F', ["富士康", "富哥"]),
    new Contacts('G', ["哥哥", "公公", "姑姑"]),
    new Contacts('H', ["皇上", "皇后", "皇子"]),
  ]
  scroller: Scroller = new Scroller() // list 滚动控制
  value: string[] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
  [@State](/user/State) flag: number = 0 // 绑定AlphabetIndexer的index
  preIndex: number = 0;
  build() {
    Row() {
      List({ space: 20, initialIndex: 0, scroller: this.scroller }) {
        ForEach(this.contacts, (value: Contacts) => {
          ListItem() {
            Column() {
              Text('' + value.index)
                .fontSize(30)
                .textAlign(TextAlign.Center)
                .backgroundColor('#ffffff')
                .margin(30)
              ForEach(value.names, (name: string) => {
                Column({ space: 10 }) {
                  Text('' + name)
                    .fontSize(20)
                    .textAlign(TextAlign.Center)
                    .backgroundColor('#ffffff')
                    .margin(10)
                }
              })
            }
          }
        })
      }
      .width('80%')
      .backgroundColor('#fffff0')
      .listDirection(Axis.Vertical)
      .onScrollIndex((firstIndex: number, lastIndex: number) => {
        this.flag = firstIndex // 刷新 AlphabetIndexer
      })
      AlphabetIndexer({ arrayValue: this.value, selected: this.flag })
        .width("20%")
        .font({ size: 20, weight: FontWeight.Bold })
        .selectedColor(Color.Blue)
        .selectedBackgroundColor(0xCCCCCC)
        .usingPopup(true)// 是否显示弹出框
        .selectedFont({ size: 28, weight: FontWeight.Bolder })
        .itemSize(30)
        .alignStyle(IndexerAlign.Left)
        .onSelect((index: number) => {
          console.info(`AlphabetIndexer 选中了 ${this.value[index]}`)
          for (let i = 0; i < this.contacts.length; i++) {
            if (this.contacts[i].index.toString() === this.value[index]) {
              this.preIndex = index;
              this.scroller.scrollToIndex(i);
              return;
            }
          }
          this.flag = this.preIndex;
        })
    }.width("100%")
  }
} 

更多关于HarmonyOS 鸿蒙Next 区号选择Demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,关于“Next 区号选择Demo”的实现,通常涉及使用ArkUI框架来构建用户界面,并结合系统提供的API进行区号数据的查询和展示。以下是一个简要的实现思路:

  1. UI设计

    • 使用ArkUI的组件(如List、Picker等)设计区号选择的界面。
    • 创建一个按钮用于触发“Next”操作。
  2. 数据准备

    • 准备一个包含区号和对应地区名称的JSON或数组数据。
    • 将数据加载到内存中,供界面展示和选择。
  3. 逻辑处理

    • 监听“Next”按钮的点击事件。
    • 获取用户选择的区号。
    • 根据选择的区号,执行相应的逻辑(如跳转到下一个界面、显示对应的地区信息等)。
  4. 错误处理

    • 如果用户未选择区号,给出提示信息。
    • 处理数据加载失败的情况,给出相应的错误提示。
  5. 测试与调试

    • 在模拟器或真机上测试区号选择功能。
    • 确保在各种情况下(如数据为空、网络异常等)都能正确处理。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部