HarmonyOS 鸿蒙Next如何设置半透明页面
HarmonyOS 鸿蒙Next如何设置半透明页面
【问题描述】
目前有需求实现一个类似底部弹窗形式的登录页面,高度不充满整个屏幕,未填充的区域半透明可见底部页面内容。登录页面需要走路由管理,不能通过弹窗实现。此场景如何实现半透明背景页面呢?
示例代码如下:
import router from ‘@ohos.router’;
@Entry
@Component
struct Index {
build() {
Column() {
Text(‘点击跳转登录页面’)
.height(52)
.width(‘100%’)
.margin({top: 100})
.backgroundColor(’#fafafc’)
.textAlign(TextAlign.Center)
.onClick(() => {
router.pushUrl({url: ‘pages/Second’})
})
}
.height(‘100%’)
.width(‘100%’)
}
}
@Entry({ routeName: ‘Second’ })
@Component
export struct Second {
build() {
Column() {
List() {
ListItem() {
Text(‘AAAAAAAAAA’)
}.height(52)
}
.width(‘100%’)
.height(500)
.backgroundColor(’#00ff00’)
}
.justifyContent(FlexAlign.End)
.width(‘100%’)
.height(‘100%’)
.backgroundColor(’#00ffffff’)
.opacity(0.1)
}
}
【解决方案】
使用@ohos.arkui.componentSnapshot库,获取屏幕截图pixelMap后,通过全局变量传参,将当前屏幕截图作为登录页面背景图来实现伪透明效果。
目前看到论坛有个使用Navgation的方案实现路由页面的模态背景及动画控制https://developer.huawei.com/consumer/cn/forum/topic/0201150581656599021?fid=0109140870620153026,
我们也遇到这种场景,原本参考Android是可以设置Activity的Theme实现Dialog样式的页面,原因是每个Activity都会创建自己的Window,相当于对Window设置了半透明背景效果,但是现在鸿蒙默认只有一个UIAbility,里面通过路由打开的多个page其实应该也是在一个Window上(同一个UIAbility中),因此即便修改了Page的opacity属性也无法实现半模态,还是看不到前一个页面的背景,因此路由Page现在无法实现半模态,这样,现阶段想实现模态弹窗效果,只能使用CustomDialog,意味着开发者被限死只能使用一种方案。不知道官方后面是否有这方面的考量
HarmonyOS 鸿蒙Next设置半透明页面,可以通过设置页面的backgroundColor属性为半透明的颜色值来实现。例如,使用#80FFFFFF
(白色半透明)作为背景色。此外,也可以使用子窗口(SubWindow)加载页面,并设置子窗口的背景为透明,以此实现页面级的半透明效果。如果问题依旧没法解决,请加我微信,我的微信是itying888。