【从零开始鸿蒙开发:01】自定义闪屏页

大体介绍

文件介绍

页面结构
其中:

  • pages为我们的页面内容(我个人理解功能性小于activity但是大于fragment)
  • route_map.json 为自定义的路由表(使用Navigation而不是Router
  • SplashPage.ets 为我们自定义的闪屏文件
  • HomePage.ets 为我们测试的二级页面
  • route_map.json 需要配置在module.json5中

各部分代码

SplashPage.ets

import { router } from "@kit.ArkUI"

@Entry
@Component
struct SplashPage {
  build() {
    Column() {
      Image($r("app.media.huawei_logo"))
        .padding({
          left: "15%",
          right: "15%"
        }).width("100%")

      LoadingProgress()
        .width("20%")
        .height("20%")
        .color(Color.Red)
    }.height('100%')
    .width('100%')
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.Center)
  }

  aboutToAppear(): void {
    setTimeout(() => {
      router.pushUrl(
        { url: "pages/Index" }
      ).then(()=>{
        router.clear()
      })
    }, 2000)
  }
}

Index.ets


@Entry
@Component
struct Index {
  @Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack();



  build() {
    Navigation(this.pageInfos) {
        Column(){
          Button("TO HOME").onClick(()=>{
            this.pageInfos.pushPathByName("HomePage",null,true)
          })
        }
    }
    .height('100%')
    .width('100%')
    .mode(NavigationMode.Stack)
    .hideBackButton(true)
    .titleMode(NavigationTitleMode.Mini)
    .toolbarConfiguration([

    ])
  }
}

HomePage.ets

@Builder
export function PageOnBuilder(){
  HomePage()
}

@Component
struct HomePage {
  @State message: string = 'this is home';

  build() {
    NavDestination(){
      RelativeContainer() {
        Text(this.message)
          .id('HomePageHelloWorld')
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .alignRules({
            center: { anchor: '__container__', align: VerticalAlign.Center },
            middle: { anchor: '__container__', align: HorizontalAlign.Center }
          })
      }
      .height('100%')
      .width('100%')
    }
  }
}

route_map.json

{
  "routerMap": [
    {
      "name": "HomePage",
      "pageSourceFile": "src/main/ets/pages/HomePage.ets",
      "buildFunction": "PageOnBuilder"
    }
  ]
}

module.json5

 {
  "module": {
  	...
    "routerMap": "$profile:route_map",
    ...
    ]
  }
}

流程

  1. 修改启动页为自定义的Splash
  2. 自定义操作后跳到真正的Index页面
  3. Index页面用Navigation管理页面路由
### devecostudio 模拟器闪屏解决方案 对于 DevEco Studio 的模拟器出现闪屏问题,可以参考 Android Studio 中类似的解决思路[^3]。以下是针对该问题的具体分析和可能的解决方案: #### 可能的原因 DevEco Studio 是华为开发的一款集成环境工具,主要用于鸿蒙系统的应用开发。其内置的模拟器可能会因为硬件加速配置不当、虚拟机设置错误或者特定版本兼容性问题而引发闪屏现象。 --- #### 解决方案 ##### 方法一:调整模拟器的图形渲染模式 尝试更改模拟器使用的 GPU 渲染方式为 **Software** 而不是默认的 **Hardware Acceleration**。 1. 打开 DevEco Studio 并进入模拟器管理界面。 2. 编辑当前正在使用的设备配置文件。 3. 在高级选项中找到“Graphics”,将其改为 **Software GL+** 或其他可用选项。 4. 应用更改并重启模拟器。 这种方法通过禁用硬件加速来减少因显卡驱动不匹配引起的闪烁问题。 ##### 方法二:重新创建模拟器设备 如果某些预设的模拟器设备存在问题,则可以通过删除旧设备并新建一个正常工作的替代品来解决问题。 1. 删除现有的异常行为的模拟器实例。 2. 创建一个新的虚拟设备,在此过程中注意选择支持最新 API 版本以及具备良好测试记录的标准机型。 3. 避免选用带有 Play Store 图标的特殊定制版模型(这些通常仅适用于 Google 生态),而是挑选基础款型作为目标运行平台。 这种操作能够规避由于个别型号特有的缺陷所造成的显示障碍。 ##### 方法三:更新或修复主机端依赖组件 确保本地计算机上的必要辅助库处于最新状态也是至关重要的一步。 - 更新 Intel HAXM 至最新稳定发行号; - 安装最新的显卡驱动程序以获得更好的性能表现与稳定性保障; - 对于 Windows 用户来说,还应该核查 DirectX 是否已升级到建议等级之上[^1]。 此外,定期检查官方文档获取关于如何优化仿真体验的最佳实践指南同样有助于预防此类故障的发生。 ##### 方法四:切换至真实物理装置调试 当所有软件层面的努力均未能奏效之时,转而采用实体移动终端来进行项目验证不失为一种务实的选择。连接经授权认证过的安卓手机或其他智能产品接入IDE之后即可开展实际条件下的功能检验工作。 这种方式绕过了任何潜在的桌面级仿真的局限性,从而提供更为可靠的结果反馈途径[^5]。 --- ```xml <!-- 示例代码片段用于修改 App 主题 --> <style name="CustomTheme" parent="@android:style/Theme.Holo.Light"> <!-- 设置背景颜色防止空白屏幕 --> <item name="android:windowBackground">@color/black</item> <!-- 移除标题栏 --> <item name="android:windowNoTitle">true</item> <!-- 实现全屏效果 --> <item name="android:windowFullscreen">true</item> </style> ``` 上述 XML 文件展示了怎样自定义应用程序的主题样式以便改善启动过程中的视觉过渡效果,这也可以间接缓解部分类型的短暂亮光干扰状况。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值