HarmonyOS鸿蒙Next中app需要再用户登录后再整个app上添加一个水印,每个页面都要覆盖,请问需要怎么做

HarmonyOS鸿蒙Next中app需要再用户登录后再整个app上添加一个水印,每个页面都要覆盖,请问需要怎么做 app需要再用户登录后再整个app上添加一个水印,每个页面都要覆盖,请问需要怎么做

4 回复

目前没有统一处理全局水印的方式,可以把水印样式定义成公共组件,可参考如下代码:

1、定义全局的水印组件

@Entry
@Component
export struct WaterMarkComponent {
  build() {
    Column({ space: 10 }) {
      Text("TestMark")
        .fontSize(50)
        .fontColor(Color.Gray)
    }
    .width('100%')
    .height('100%')
    .backgroundColor("#51aaaaaa")
    .justifyContent(FlexAlign.Center)
  }
}

@Builder
export function createWaterMark() {
  WaterMarkComponent()
    .hitTestBehavior(HitTestMode.None) // 必须设置其触摸测试为None或Transparent,否则正常组件无法响应事件
}

2、基于水印组件定义一个export的custombuilder,以供全局使用

@Builder
export function createWaterMark() {
  WaterMarkComponent()
    .hitTestBehavior(HitTestMode.None) // 必须设置其触摸测试为None或Transparent,否则正常组件无法响应事件
}

3.在需要加水印页面的根节点上添加.overlay属性,并使用上述的custombuilder

import { promptAction } from '@kit.ArkUI';
import { createWaterMark } from '../components/watermark';

@Entry
@Component
struct TestMarkDemo {
  build() {
    Row() {
      Column() {
        Text("click")
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
          .onClick(() => { // 测试对正常事件的响应
            promptAction.showToast({ message: "test" })
          })
      }
      .width('100%')
    }
    .height('100%')
    .overlay(createWaterMark())
  }
}

更多关于HarmonyOS鸿蒙Next中app需要再用户登录后再整个app上添加一个水印,每个页面都要覆盖,请问需要怎么做的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


动态绘制背景图?

在HarmonyOS鸿蒙Next中,如果需要在用户登录后在App的每个页面上添加水印,可以通过以下步骤实现:

  1. 创建自定义水印组件:首先,创建一个自定义的水印组件,该组件可以包含水印文本、样式、透明度等属性。使用ComponentText组件来实现水印的显示。

  2. 全局管理水印状态:通过AppStorageLocalStorage来管理水印的全局状态。在用户登录后,设置一个全局标志,表示需要显示水印。

  3. 在每个页面中嵌入水印组件:在每个页面的根布局中嵌入自定义的水印组件。通过条件渲染,根据全局状态决定是否显示水印。

  4. 监听页面切换:使用RouterPageAbility监听页面切换事件,确保每次页面切换时水印组件都能正确显示。

  5. 动态更新水印内容:如果需要动态更新水印内容(如显示用户名),可以通过AppStorageLocalStorage传递数据,并在水印组件中实时更新。

示例代码片段:

// 自定义水印组件
@Component
struct WatermarkComponent {
  @StorageProp('showWatermark') showWatermark: boolean = false;
  @StorageProp('watermarkText') watermarkText: string = '';

  build() {
    if (this.showWatermark) {
      Text(this.watermarkText)
        .fontSize(16)
        .opacity(0.5)
        .position({ x: 0, y: 0 })
        .zIndex(9999);
    }
  }
}

// 在页面中使用水印组件
@Entry
@Component
struct MainPage {
  build() {
    Column() {
      // 页面内容
      Text('Main Page Content')
      
      // 嵌入水印组件
      WatermarkComponent()
    }
  }
}

// 用户登录后设置水印状态
function onUserLogin() {
  AppStorage.SetOrCreate('showWatermark', true);
  AppStorage.SetOrCreate('watermarkText', 'Logged in as User');
}

通过上述方法,可以在用户登录后在HarmonyOS鸿蒙Next的每个页面上显示水印。

在HarmonyOS鸿蒙Next中,要实现全局水印功能,可以在用户登录后动态添加一个全屏的水印View,并将其置于所有页面的最顶层。可以通过以下步骤实现:

  1. 创建水印View:使用ComponentText组件,设置透明度、旋转角度等样式。
  2. 全局添加:在AbilityonWindowStageCreate中,通过WindowaddComponent方法将水印View添加到根布局。
  3. 页面切换时保持:在页面跳转时,确保水印View不会被移除或覆盖,可以通过WindowgetTopWindow方法获取当前窗口并保持水印。

示例代码:

Window window = getWindow();
Text watermark = new Text(this);
watermark.setText("Confidential");
watermark.setAlpha(0.2f);
watermark.setRotation(-45);
window.addComponent(watermark, new WindowManager.LayoutConfig(MATCH_PARENT, MATCH_PARENT));

这样,水印将在所有页面显示,且不会被其他组件覆盖。

回到顶部