首页 > 其他分享 >鸿蒙(HarmonyOS)实现隐私政策弹窗

鸿蒙(HarmonyOS)实现隐私政策弹窗

时间:2024-08-10 08:58:21浏览次数:8  
标签:string 鸿蒙 color app HarmonyOS 组件 fontColor 弹窗

在实现用户协议弹窗时,通常我们会想到使用系统自定义弹窗,并在弹窗中点击跳转到Web页面。但在HarmonyOS中,由于系统弹窗的显示优先级高于其他组件,即使跳转到Web页面,弹窗依然会显示在最上层。

为了解决这个问题,我们可以自定义一个组件来模拟弹窗,这样当跳转到Web页面时,Web内容会覆盖这个模拟的弹窗。

效果图如下:

首先,我们来看程序的入口代码。最外层使用了一个RelativeContainer容器组件,通过showAgreePrivacyPolicy变量控制隐私政策弹窗的显示状态。每次启动应用时,该变量默认设置为true,以显示隐私政策弹窗。在实际开发中,你可以通过preferences保存这个变量的状态。

struct Index {
    @State showAgreePrivacyPolicy:boolean=true;

    build() {
        RelativeContainer(){
            Row({space:10}){
                Image($r('app.media.app_icon')).width(60).height(60)

                Column({space:5}){
                    Text($r('app.string.app_name')).fontSize(22).fontColor($r('app.color.title_color'))
                    Text($r('app.string.launcher_tip')).fontSize(14).fontColor($r('app.color.other_color'))
                }.alignItems(HorizontalAlign.Start)
            }.alignRules({
                bottom: {anchor: "__container__", align: VerticalAlign.Bottom},
                middle: { anchor: '__container__', align: HorizontalAlign.Center }  //以父容器为锚点,水平方向居中对齐
            }).margin({
                bottom:30
            })

            if(this.showAgreePrivacyPolicy){//通过变量控制隐私政策弹窗是否显示
                PrivacyPolicyDialog({
                    cancel:this.onCancel.bind(this),//取消按钮点击
                    confirm:this.onAgree.bind(this),//确定按钮点击
                })
            }
        }.width('100%')
        .height('100%').backgroundColor($r('app.color.white'))
    }

    onCancel():void {
        (getContext(this) as common.UIAbilityContext)?.terminateSelf()
    }

    onAgree():void {//同意隐私政策
        this.showAgreePrivacyPolicy = false;
    }
}

接下来是PrivacyPolicyDialog组件代码:

  • 根组件填充100%宽高,设置黑色背景,透明度30%
  • 内容区域使用Stack组件,背景为白色,圆角边框,宽度占父组件的80%。
  • 文字内容用Text和Span组件包裹,支持滚动功能。点击用户协议和隐私政策的文字时,使用router打开Web页面。
@Component
export default struct PrivacyPolicyDialog{
    cancel!: () => void
    confirm!: () => void

    build() {
        Stack(){
            Column() {
                Text($r('app.string.simple_user_policy')).fontSize(18).fontColor($r('app.color.title_color')).margin({ top: 30, bottom: 19 })

                Scroll(){
                    Text(){
                        Span($r('app.string.privacy_policy_start'))
                        Span($r('app.string.user_agreement_two')).fontColor($r('app.color.mainColor')).onClick(() => {
                            this.openWebUrl("/useragreement.html");
                        })
                        Span($r('app.string.and'))
                        Span($r('app.string.privacy_policy_two')).fontColor($r('app.color.mainColor')).onClick(() => {
                            this.openWebUrl("/privacypolicy.html");
                        })
                        Span($r('app.string.simple_privacy_policy'))
                    }.fontSize(16).fontColor($r('app.color.body_color')).margin({
                        left:25,
                        right:25
                    })
                }.height(120)

                Column(){
                    Button($r('app.string.disagree_privacy_policy')).onClick(() => {
                        this.cancel();
                    }).fontColor($r('app.color.other_color')).fontSize(15).backgroundColor(Color.Transparent)

                    Button($r('app.string.agree_privacy_policy')).onClick(() => {
                        this.confirm();
                    }).fontColor($r('app.color.white')).fontSize(17)
                        .linearGradient({
                            direction: GradientDirection.Right, colors:[[$r('app.color.start_main_color'),0.0],[$r('app.color.end_main_color'),1.0]]
                        }).width('80%').margin({
                        top:15,bottom:21
                    }).borderRadius(24)
                }
            }.backgroundColor($r('app.color.white')).borderRadius(13).width('80%')
        }.width('100%')
        .height('100%').backgroundColor("#4D000000")//黑色背景 透明度约为 30%
    }

    openWebUrl(urlSuffix:string){
        let url= "https://www.srzs.top"+urlSuffix;
        router.pushUrl({
            url: 'pages/WebViewPage',
            params:{
                data1: 'message',
                url: url  // 传递的 URL 参数
            }
        }, router.RouterMode.Single)
    }
}

WebViewPage展示Web网页的代码就不贴出来了,大家可直接下载源码。还有加载网页一定要网络权限,在entry/module.json5这个文件中配置。

源码下载

https://github.com/ansen666/PrivacyPolicy

如果您想第一时间看我的后期文章,扫码关注公众号

      安辉编程笔记 - 开发技术分享
             扫描二维码加关注

标签:string,鸿蒙,color,app,HarmonyOS,组件,fontColor,弹窗
From: https://www.cnblogs.com/yishaochu/p/18351907

相关文章

  • 《永劫无间》游戏崩溃提示缺少steam_api.dll文件怎么处理?永劫无间游戏弹窗“找不到ste
    在玩《永劫无间》时,如果遇到游戏崩溃并提示缺少steam_api.dll文件,这是一个常见的问题。可以尝试重新安装Steam平台,或者从可靠渠道获取该文件并放置到正确的游戏目录下,以恢复游戏的正常运行。本篇将为大家带来《永劫无间》游戏崩溃提示缺少steam_api.dll文件修复方法的内容,感兴......
  • 《英雄联盟》游戏闪退提示“base.dll文件损坏”怎么修复?英雄联盟游戏崩溃弹窗base.dll
    在《英雄联盟》遇到因“base.dll文件损坏”而导致的游戏闪退问题时,可以先尝试重新安装游戏,这能覆盖可能损坏的文件。还可以使用系统的文件修复工具,对该文件进行检测和修复,或者从可靠来源获取该文件进行替换。本篇将为大家带来《英雄联盟》游戏闪退提示“base.dll文件损坏”修复......
  • 电脑弹窗“找不到libmmd.dll文件”怎么处理?Win11系统缺少libmmd.dll文件的修复方法一
    当电脑弹窗提示“找不到libmmd.dll文件”时,有几种可行的修复方法。可以在网上搜索该文件并下载,将其放置到正确的系统目录中。也可以通过运行系统文件检查工具,对缺失的文件进行扫描和修复,恢复系统的正常运行。本篇将为大家带来电脑弹窗“找不到libmmd.dll文件”的内容,感兴趣的小......
  • 《NBA2K24》弹窗提示“D3D Creation Failed错误”怎么处理?NBA2K24游戏闪退显示D3D Cre
    在NBA2K24游戏中遇到“D3DCreationFailed”错误导致的闪退问题时,可尝试多种修复方法。首先更新显卡驱动至最新版本,检查DirectX是否需要更新,还可以调整游戏内的图形设置,降低画质等,这些措施或许能解决闪退问题。本篇将为大家带来NBA2K24游戏闪退D3DCreationFailed错误修复方......
  • 鸿蒙HarmonyOS NEXT开发:图形变换(ArkTS通用属性)
    图形变换用于对组件进行旋转、平移、缩放、矩阵变换等操作。说明:从APIVersion7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。rotaterotate(value:RotateOptions)设置组件旋转。卡片能力: 从APIversion9开始,该接口支持在ArkTS卡片中使用......
  • 鸿蒙HarmonyOS NEXT开发:形状裁剪(ArkTS通用属性)
    形状裁剪用于对组件进行裁剪、遮罩处理。说明:从APIVersion7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。clip12+clip(value:boolean)是否对当前组件进行裁剪。系统能力: SystemCapability.ArkUI.ArkUI.Full参数:参数名类型必填说明valu......
  • 鸿蒙HarmonyOS NEXT开发:颜色渐变(ArkTS通用属性)
    颜色渐变设置组件的颜色渐变效果。说明:从APIVersion7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。linearGradientlinearGradient(value:{angle?:number|string;direction?:GradientDirection;colors:Array<[ResourceColor,number]......
  • 鸿蒙HarmonyOS NEXT开发:菜单控制(ArkTS通用属性)
    菜单控制为组件绑定弹出式菜单,弹出式菜单以垂直列表形式显示菜单项,可通过长按、点击或鼠标右键触发。说明:从APIVersion7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。CustomBuilder里不支持再使用bindMenu、bindContextMenu弹出菜单。多级菜......
  • 鸿蒙HarmonyOS NEXT开发:悬浮态效果(ArkTS通用属性)
    悬浮态效果设置组件的鼠标悬浮态显示效果。说明:从APIVersion8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。hoverEffecthoverEffect(value:HoverEffect)设置组件的鼠标悬浮态显示效果。原子化服务API: 从APIversion11开始,该接口支持在......
  • 鸿蒙 webview 实现顶部 Progress进度条
    1,先看效果 2,直接cv代码importweb_webviewfrom'@ohos.web.webview';interfacePerUrl{url:string,age:number}@Componentexportstructwebviews{controller:web_webview.WebviewController=newweb_webview.WebviewController();ports:......