当前位置: 首页 > article >正文

【每日学点HarmonyOS Next知识】状态栏字体、生命周期、自定义对话框屏幕中间、透明度、tab居中

1、HarmonyOS 单页面如何控制状态栏字体颜色?

状态栏字体颜色可通过设置statusBarContentColor修改,参考文档如下:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-window-V5
参考代码:

import window from '@ohos.window';
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  build() {
    Row() {
      Column() {
        Text(this.message)
          .align(Alignment.Center)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .fontColor(Color.White)
        ColumnSplit().height(20)
        Button() {
          Text("点我看效果")
        }
        .width(100)
        .height(50)
        .onClick(() => {
          this.message = "我变了"
          window.getLastWindow(getContext(), (err, data) => {
            let win: window.Window;
            if (err.code) {
              console.error("error code :" + JSON.stringify(err.code))
              return;
            }
            try {
              win = data;
              //设置窗口为全屏模式
              win.setWindowLayoutFullScreen(true);
              // 设置状态栏
              win.setWindowSystemBarProperties({
                // 设置状态栏颜色为其他颜色
                statusBarColor: '#ffe30520',
                // 设置状态栏文本颜色为白色
                statusBarContentColor: '#ffffffff'
              })
              console.info('带状态栏沉浸式窗口设置完成')
            }
            catch (expextion) {
              console.error("error cause :" + JSON.stringify(expextion))
            }
          })
        })
        ColumnSplit().height(20)
      }
      .width('100%')
    }
    .height('100%')
    .backgroundColor(Color.Green)
  }
}
2、HarmonyOS 生命周期回调触发?

当程序被上滑删除退出时,当前页面的onpagehide和aboutToDisappear哪个先触发。

根据场景来看,只会触发aboutToDisappear回调,生命周期相关特性可参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/js-framework-lifecycle-V5

在app.js中可以定义如下应用生命周期函数:

属性类型描述触发时机
onCreate() => void应用创建当应用创建时调用。
onShow6+() => void应用处于前台当应用处于前台时触发。
onHide6+() => void应用处于后台当应用处于后台时触发。
onDestroy() => void应用销毁当应用退出时触发。
3、HarmonyOS 自定义的dialog如何显示在屏幕中间?

自定义的时间弹窗或者用户隐私协议弹窗如何显示在屏幕中间
参考demo:

@CustomDialog
struct CustomDialogExample {
  controller?: CustomDialogController
  private selectDate: Date = new Date()

  build() {
    Column() {
      DatePicker({
        start: new Date('2009-1-1'),
        end: new Date('2100-12-31'),
        selected: this.selectDate
      })
    }
  }
}

@Entry
@Component
struct Index {
  @State textValue: string = ''
  @State inputValue: string = 'click me'
  dialogController: CustomDialogController | null = new CustomDialogController({
    builder: CustomDialogExample(),
    openAnimation: {
      duration: 1200,
      curve: Curve.Friction,
      delay: 500,
      playMode: PlayMode.Alternate,
      onFinish: () => {
        console.info('play end')
      }
    },
    autoCancel: true,
    alignment: DialogAlignment.Center,
    gridCount: 4,
    customStyle: true,
    backgroundColor: 0xd9ffffff,
    cornerRadius: 10,
  })

  // 在自定义组件即将析构销毁时将dialogControlle置空
  aboutToDisappear() {
    this.dialogController = null // 将dialogController置空
  }

  build() {
    Column() {
      Button(this.inputValue)
        .onClick(() => {
          if (this.dialogController != null) {
            this.dialogController.open()
          }
        }).backgroundColor(0x317aff)
    }.width('100%').margin({ top: 5 })
  }
}
4、HarmonyOS UI组件提供setAlpha的属性吗?

opacity可以设置透明度,请参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-opacity-V5

opacity(value: number | Resource)
设置组件的不透明度。
参数:

参数名类型必填说明
valuenumber | Resource元素的不透明度,取值范围为0到1,1表示不透明,0表示完全透明, 达到隐藏组件效果,但是在布局中占位。

默认值:1

说明:

子组件会继承父组件的透明度,并与自身的透明度属性叠加。如:父组件透明度为0.1,子组件设置透明度为0.8,则子组件实际透明度为0.1*0.8=0.08。
示例

该示例主要显示通过opacity设置组件的不透明度。

// xxx.ets
@Entry
@Component
struct OpacityExample {
  build() {
    Column({ space: 5 }) {
      Text('opacity(1)').fontSize(9).width('90%').fontColor(0xCCCCCC)
      Text().width('90%').height(50).opacity(1).backgroundColor(0xAFEEEE)
      Text('opacity(0.7)').fontSize(9).width('90%').fontColor(0xCCCCCC)
      Text().width('90%').height(50).opacity(0.7).backgroundColor(0xAFEEEE)
      Text('opacity(0.4)').fontSize(9).width('90%').fontColor(0xCCCCCC)
      Text().width('90%').height(50).opacity(0.4).backgroundColor(0xAFEEEE)
      Text('opacity(0.1)').fontSize(9).width('90%').fontColor(0xCCCCCC)
      Text().width('90%').height(50).opacity(0.1).backgroundColor(0xAFEEEE)
      Text('opacity(0)').fontSize(9).width('90%').fontColor(0xCCCCCC)
      Text().width('90%').height(50).opacity(0).backgroundColor(0xAFEEEE)
    }
    .width('100%')
    .padding({ top: 5 })
  }
}

在这里插入图片描述

5、HarmonyOS 关于Tabs只能居中的问题?

Tabs是否支持左对齐,右对齐

Tabs组件未提供居左的样式,可以用Flex自定义一个靠左的tabBar组件,在onclick事件中通过修改索引值和Tabs组件的索引联动,实现切换效果

@Entry
@Component
struct Index {
  private tabsController: TabsController = new TabsController()
  @State currentIndex: number = 0;

  @Builder
  TabBarBuilder(title: string, targetIndex: number) {
    Text(title)
      .fontWeight(targetIndex === this.currentIndex ? FontWeight.Bold : FontWeight.Normal)
      .margin({ left: 10, right: 10 })
      .onClick(() => {
        this.tabsController.changeIndex(targetIndex)
      })
  }

  build() {
    Row() {
      Column() {
         
Flex({ direction: FlexDirection.Row }) {
        Flex({ direction: FlexDirection.RowReverse }) {
          this.TabBarBuilder('页签1', 0)
          this.TabBarBuilder('页签2', 1)
          this.TabBarBuilder('页签3', 2)
        }

        Tabs({ barPosition: BarPosition.End, controller: this.tabsController }) {
          TabContent() {
            Text("页签1页面")
          }

          TabContent() {
            Text("页签2页面")
          }

          TabContent() {
            Text("页签3页面")
          }
        }.onChange((index: number) => {
          this.currentIndex = index;
        })
      }
    }
  }
}
原文地址:https://blog.csdn.net/sjw890821sjw/article/details/146247934
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/590264.html

相关文章:

  • 从零开始 | C语言基础刷题DAY3
  • 数据库管理员助理(DP-300)适合什么群体考?
  • DeepSeek:从入门到精通
  • 开发一个go模块并在其他项目中引入
  • 耗时sql分析
  • Webpack 模块联邦 vs npm 私服
  • QT编译器mingw与msvc区别及环境配置
  • 【从零开始学习计算机科学】信息安全(八)防火墙
  • 《C++ Primer》学习笔记(四)
  • 【从零开始学习计算机科学】信息安全(七)网络攻击
  • Langchian构建代理
  • Amazon Quantum Ledger Database (QLDB):革新数据可信记录的终极解决方案
  • 区块链加密技术公司DApp开发指南:从零开始到上线
  • 表达式引擎之通用的开屏页后端接口设计
  • 【软件工程】03_软件需求分析
  • 从零开始学Vue:打开前端新世界的大门
  • linux------------------linux基础指令
  • [IP]UART
  • Linux文件IO——缓冲区磁盘上的文件管理
  • 【商城实战(39)】Spring Boot 携手微服务,商城架构焕新篇