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

 更新时间:2024年08月10日 09:36:10   作者:安辉  
但在HarmonyOS中,由于系统弹窗的显示优先级高于其他组件,即使跳转到Web页面,弹窗依然会显示在最上层,下面给大家分享鸿蒙(HarmonyOS)实现隐私政策弹窗,感兴趣的朋友跟随小编一起看看吧

在实现用户协议弹窗时,通常我们会想到使用系统自定义弹窗,并在弹窗中点击跳转到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

到此这篇关于鸿蒙(HarmonyOS)实现隐私政策弹窗的文章就介绍到这了,更多相关鸿蒙隐私政策弹窗内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • so easy!10行代码写个

    so easy!10行代码写个"狗屁不通"文章生成器功能

    这篇文章主要介绍了通过10行代码写个"狗屁不通"文章生成器功能,真的超级简单,感兴趣的朋友跟随脚本之家小编一起看看吧
    2020-01-01
  • 使用数学软件Matlab建模画图程序汇总

    使用数学软件Matlab建模画图程序汇总

    这篇文章主要介绍了使用数学软件Matlab建模画图程序汇总,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-12-12
  • 浏览器插件cursor实现自动注册、续杯的详细过程

    浏览器插件cursor实现自动注册、续杯的详细过程

    Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细的日志系统,为用户提供了良好的使用体验,本文给大家介绍浏览器插件cursor实现自动注册、续杯的详细过程,感兴趣的朋友一起看看吧
    2025-06-06
  • 让程序员都费解的10大编程语言特性

    让程序员都费解的10大编程语言特性

    这篇文章主要介绍了让程序员都费解的10大编程语言特性,本文罗列了如javascript、Ruby、Java等语言中让人费解的10个语言特性,需要的朋友可以参考下
    2014-09-09
  • DeepSeek本地部署+可视化WebUI的实现(图文教程)

    DeepSeek本地部署+可视化WebUI的实现(图文教程)

    本文主要介绍了在本地部署DeepSeek并使用可视化WebUI进行AI辅助,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-02-02
  • VSCode + WSL 2 + Ruby环境搭建图文详解

    VSCode + WSL 2 + Ruby环境搭建图文详解

    这篇文章主要介绍了VSCode + WSL 2 + Ruby环境搭建,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • JetBrains发布java代码质量检测工具Qodana早期预览版

    JetBrains发布java代码质量检测工具Qodana早期预览版

    这篇文章主要介绍了JetBrains发布java代码质量检测工具Qodana早期预览版,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • grafana安装及使用教程详解

    grafana安装及使用教程详解

    这篇文章主要介绍了grafana安装及使用教程详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Prometheus和NodeExporter安装监控数据说明

    Prometheus和NodeExporter安装监控数据说明

    这篇文章主要为大家介绍了Prometheus和node exporter安装监控数据说明,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • 超实用Internet Download Manager(IDM)破解注册码,全版本通用

    超实用Internet Download Manager(IDM)破解注册码,全版本通用

    IDM下载器是一个十分好用的文件下载工具。IDM下载器它能够帮助你提升5倍的下载速度,强大的续传功能,让你不再担心因网络问题、计算机宕机、停电等原因所造成的数据不全问题,下面小编给大家带来了Internet Download Manager(IDM)破解注册码,感兴趣的朋友参考下吧
    2023-01-01

最新评论