鸿蒙RN中使用react-native-safe-area-context

React Native使用@react-navigation/native配置页面路由 阅读详情

由于版本兼容问题,本文介绍使用第三方库

本文内容来自:zh-cn/react-native-safe-area-context.md · react-native-oh-library/usage-docs - Gitee.com

安装与使用

请到三方库的 Releases 发布地址查看配套的版本信息:@react-native-oh-tpl/react-native-safe-area-context Releases 。对于未发布到npm的旧版本,请参考安装指南安装tgz包。

进入到工程目录并输入以下命令:

npm
npm install @react-native-oh-tpl/react-native-safe-area-context
yarn
yarn add @react-native-oh-tpl/react-native-safe-area-context

下面的代码展示了这个库的基本使用场景:

[!WARNING] 使用时 import 的库名不变。

import React from "react";
import { Text, View } from "react-native";
import {
  SafeAreaProvider,
  SafeAreaView,
  initialWindowMetrics,
} from "react-native-safe-area-context";

const App = () => {
  return (
    <SafeAreaProvider initialMetrics={initialWindowMetrics}>
      <SafeAreaView style={{ flex: 1, backgroundColor: "red" }}>
        <View style={{ flex: 1 }}>
          <Text>hello</Text>
        </View>
      </SafeAreaView>
    </SafeAreaProvider>
  );
};

export default App;

Link

目前 HarmonyOS 暂不支持 AutoLink,所以 Link 步骤需要手动配置。

首先需要使用 DevEco Studio 打开项目里的 HarmonyOS 工程 harmony

1.在工程根目录的 oh-package.json5 添加 overrides 字段

{
  ...
  "overrides": {
    "@rnoh/react-native-openharmony" : "./react_native_openharmony"
  }
}

2.引入原生端代码

目前有两种方法:

  1. 通过 har 包引入(在 IDE 完善相关功能后该方法会被遗弃,目前首选此方法);
  2. 直接链接源码。

方法一:通过 har 包引入

[!TIP] har 包位于三方库安装路径的 harmony 文件夹下。

打开 entry/oh-package.json5,添加以下依赖

"dependencies": {
    "@rnoh/react-native-openharmony": "file:../react_native_openharmony",

    "@react-native-oh-tpl/react-native-safe-area-context": "file:../../node_modules/@react-native-oh-tpl/react-native-safe-area-context/harmony/safe_area.har"
  }

点击右上角的 sync 按钮

或者在终端执行:

cd entry
ohpm install

方法二:直接链接源码

[!TIP] 如需使用直接链接源码,请参考直接链接源码说明

3.配置 CMakeLists 和引入 SafeAreaViewPackage

打开 entry/src/main/cpp/CMakeLists.txt,添加:

```diff
project(rnapp)
cmake_minimum_required(VERSION 3.4.1)
set(CMAKE_SKIP_BUILD_RPATH TRUE)
set(RNOH_APP_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(NODE_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../node_modules")
+ set(OH_MODULES "${CMAKE_CURRENT_SOURCE_DIR}/../../../oh_modules")
set(RNOH_CPP_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../../../../../react-native-harmony/harmony/cpp")
set(LOG_VERBOSITY_LEVEL 1)
set(CMAKE_ASM_FLAGS "-Wno-error=unused-command-line-argument -Qunused-arguments")
set(CMAKE_CXX_FLAGS "-fstack-protector-strong -Wl,-z,relro,-z,now,-z,noexecstack -s -fPIE -pie")
set(WITH_HITRACE_SYSTRACE 1) # for other CMakeLists.txt files to use
add_compile_definitions(WITH_HITRACE_SYSTRACE)

add_subdirectory("${RNOH_CPP_DIR}" ./rn)

# RNOH_BEGIN: manual_package_linking_1
add_subdirectory("../../../../sample_package/src/main/cpp" ./sample-package)
+ add_subdirectory("${OH_MODULES}/@react-native-oh-tpl/react-native-safe-area-context/src/main/cpp" ./safe-area)
# RNOH_END: manual_package_linking_1

file(GLOB GENERATED_CPP_FILES "./generated/*.cpp")

add_library(rnoh_app SHARED
    ${GENERATED_CPP_FILES}
    "./PackageProvider.cpp"
    "${RNOH_CPP_DIR}/RNOHAppNapiBridge.cpp"
)
target_link_libraries(rnoh_app PUBLIC rnoh)

# RNOH_BEGIN: manual_package_linking_2
target_link_libraries(rnoh_app PUBLIC rnoh_sample_package)
+ target_link_libraries(rnoh_app PUBLIC rnoh_safe_area)
# RNOH_END: manual_package_linking_2

打开 entry/src/main/cpp/PackageProvider.cpp,添加:

#include "RNOH/PackageProvider.h"
#include "generated/RNOHGeneratedPackage.h"
#include "SamplePackage.h"
+ #include "SafeAreaViewPackage.h"

using namespace rnoh;

std::vector<std::shared_ptr<Package>> PackageProvider::getPackages(Package::Context ctx) {
    return {
        std::make_shared<RNOHGeneratedPackage>(ctx),
        std::make_shared<SamplePackage>(ctx),
+       std::make_shared<SafeAreaViewPackage>(ctx),
    };
}

4.在 ArkTs 侧引入 SafeAreaViewPackage

打开 entry/src/main/ets/RNPackagesFactory.ts,添加:

...

+ import {SafeAreaViewPackage} from '@react-native-oh-tpl/react-native-safe-area-context/ts';

export function createRNPackages(ctx: RNPackageContext): RNPackage[] {
  return [
    new SamplePackage(ctx),
+   new SafeAreaViewPackage(ctx)
  ];
}

5.运行

点击右上角的 sync 按钮

或者在终端执行:

cd entry
ohpm install

然后编译、运行即可。

兼容性

要使用此库,需要使用正确的 React-Native 和 RNOH 版本。另外,还需要使用配套的 DevEco Studio 和 手机 ROM。

请到三方库相应的 Releases 发布地址查看 Release 配套的版本信息:@react-native-oh-tpl/react-native-safe-area-context Releases

属性

[!TIP] "Platform"列表示该属性在原三方库上支持的平台。

[!TIP] "HarmonyOS Support"列为 yes 表示 HarmonyOS 平台支持该属性;no 则表示不支持;partially 表示部分支持。使用方法跨平台一致,效果对标 iOS 或 Android 的效果。

组件 SafeAreaProvider

You should add SafeAreaProvider in your app root component. You may need to add it in other places like the root of modals and routes when using react-native-screens.

Note that providers should not be inside a View that is animated with Animated or inside a ScrollView since it can cause very frequent updates.

react-native的路由导航相关配置 react-native init 项目名字 --version 0.68.2。页面跳转实现:在src/views/Home/index.js。输入指令(这里安装的是0.68版本的,相对稳定)1、初始化一个react-native的项目。2、根据官网给的文档对应的进行安装。步骤:(前提是配置好环境之后)创建文件目录如下:创建src。接着输入 cd 项目名字。在App.js里面写入。 阅读详情

相关推荐

react-native-safe-area-context:处理JS中安全区域插图的灵活方法。 也可以在Android和Web上使用!

React本机安全区域上下文 处理安全区域的一种灵活方法也可以在Android和Web上使用! 入门 npm install react-native-safe-area-context 然后,您需要为所使用的平台链接库的本机部分。 在React Native中链接> = 0.60 使用不再需要链接软件包。 iOS平台: $ npx pod-install 在React Native <0.60中链接 链接库的最简单方法是使用CLI工具,方法是从项目的根目录运行以下命令: react-native link react-native-safe-area-context 如果您不能使用

反响良好的安全区域上下文处理 —— react-native-safe-area-context 入门指南

`react-native-safe-area-context` 是一款用于处理React Native中安全区域边缘的灵活库。它支持iOS的刘海屏设计和其他特殊屏幕形状, 并且在Android和Web平台上也能正常工作。 此库提供了一种简单而高效的方式,在React组件中获取并处理安全边距(safe area insets),这使得在各种设备上的布局适应性更强。无论是全屏应用还是仅需适配特定区

gitblog_00493的博客 2375

若依(RuoYi)项目里,Quartz定时任务踩坑实录:并发控制、事务回滚与异常处理

本文深入解析若依(RuoYi)项目中Quartz定时任务的并发控制、事务回滚与异常处理三大核心问题。通过实战案例揭示@DisallowConcurrentExecution注解的局限性和Redis分布式锁的应用,详细讲解Spring事务集成方案及多数据源事务管理,并提供生产级监控体系搭建指南,帮助开发者规避Quartz在生产环境中的常见陷阱。

weixin_28731223的博客 407

RN开发系列<6>--导航控制器

RN导航控制器的基本使用

JH_Cao的博客 4330

/proc/sys/vm/max_map_count耗尽时,调用glibc 2.11.3 free()导致程序crash,问题追踪和解决

1. 问题 在客户环境下,当我们的程序消耗较大内存时,会偶尔crash。 通过gdb分析,程序core dump在malloc/free函数内。 当把/proc/sys/vm/max_map_count 从65530增加到131070,程序再也不crash。 相关命令 echo 131073 > /proc/sys/vm/max_map_count 2.  core

万大胖博客,苦并快乐着 4429

保姆级教学:从0搭建微信小程序SpringBoot+Vue(一)

目标:实现一个微信小程序从后端数据库MySQL获取的商品展示页。 框架:后端采用SpringBoot,前端采用Vue,数据库MySQL。 部署工具:IntelliJ IDEA 2024.2专业版+HbuilderX+Node+微信开发者工具,jdk1.8已安装

weixin_44545610的博客 4924

ReactNative for Harmony 项目鸿蒙化三方库集成实战:react-native-safe-area-context

对于跨平台应用程序,处理设备的安全区域(Safe Area)是一个重要且常见的需求。不同设备(如 iPhone X 系列的刘海屏、Android 的异形屏、HarmonyOS 设备等)都有各自的安全区域限制。是一个专为 React Native 跨平台应用(包括 HarmonyOS)设计的安全区域处理库,它提供了更强大和灵活的安全区域管理能力,支持获取具体的安全区域数值、边缘特定处理等功能。库名称版本信息4.7.5。

qq_61024956的博客 1011

AJ-Report开源数据大屏存在远程命令执行漏洞

该平台可以通过post方式在validationRules参数对应值中进行命令执行,可以获得服务器权限,登陆管理后台接管大屏。如果被攻击者利用,危害后果十分严重。

swordheart的博客 387

React Native for OpenHarmony @react-native-oh-tpl/react-native-safe-area-context三方库集成实战

本文介绍了专为React Native跨平台应用(包括HarmonyOS)设计的安全区域处理库@react-native-oh-tpl/react-native-safe-area-context。该库提供SafeAreaProvider和SafeAreaView组件,支持获取设备安全区域边距信息,兼容Android、iOS和HarmonyOS三端。文章详细说明了安装步骤,重点介绍了HarmonyOS平台的手动配置方法,包括通过har包引入和源码链接两种方式,并提供了CMakeLists和PackagePr

栈深码力哥 167

手把手教你用DCA1000EVM解析IWR6843毫米波雷达数据(附MATLAB代码)

本文提供了一份详尽的实战指南,手把手教你使用DCA1000EVM采集并解析TI毫米波雷达IWR6843的原始数据。内容涵盖硬件连接配置、mmWave Studio参数设置、LVDS数据流结构解析,并附有核心MATLAB代码,详细演示了从原始二进制文件到距离-速度谱的信号处理全链路,帮助开发者快速掌握数据解析与处理的关键步骤。

terraform7cloud的博客 227

Unity2020 发布Android包,下载安装配置JDK、SDK、NDK详细教程

配置成功页面 JDK、SDK、NDK

qq_41263535的博客 1万+

ReactNative项目Openharmony三方库集成实战:react-native-safe-area-context

适配不同设备的安全区域是一个至关重要的需求。随着全面屏、刘海屏、挖孔屏等各种异形屏幕的普及,应用需要正确处理状态栏、导航栏、底部指示条等系统UI元素占据的区域,确保内容不被遮挡。是React Native生态中最流行的安全区域处理方案,提供了灵活的API来获取和处理设备的安全区域信息,是开发跨平台应用的必备工具。库名称版本信息4.7.5: 支持 RN 0.72 版本5.1.1: 支持 RN 0.77 版本官方仓库主要功能📐 获取设备安全区域插入值(insets)🖼️ 获取安全区域的frame信息。

2402_83107102的博客 513

34、Text2KGBench与GeoQuestions1089:知识图谱生成与地理空间问答的新进展

本文介绍了Text2KGBench和GeoQuestions1089在知识图谱生成与地理空间问答领域的最新进展。Text2KGBench提供了一个开放且可复现的基准,用于从文本生成知识图谱,并结合多个LLM模型和评估工具推动研究。GeoQuestions1089是目前最大的地理空间问答数据集,与GeoQA2系统结合,推动了地理空间问答系统的发展。文章还探讨了技术挑战和未来研究方向,包括多模态知识图谱生成和深度学习优化的地理空间问答系统。

css33的专栏 114

在React Native中开发鸿组件,HarmonyOS API 24 你需要了解鸿蒙开发的基础以及在React Native中调用Native Module:使用react-native-brid

正如我前面所说,与第三方程序(如数据库、缓存、Web 服务或 LDAP 服务器)通信的应用程序可能会在这些应用程序运行缓慢时放慢速度。在应用程序端使用常规代码分析方法可以进行跟踪。但是,如果第三方软件自己工作正常,那么罪魁祸首可能是网络。问题可能是配置错误的集线器,低带宽网络链路,或甚至是大量的使计算机多次发送相同的数据包的流量冲突。这里有几个元素,你应该收集一下。要了解发生了什么,首先要研究以下 3 个领域:• 使用以下工具观察网络流量。

2401_86113894的博客 346

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

【WRF安装】完整自动化 WRF-ARW/WRF-Chem 安装脚本(多服务器测试)

WW、forever的博客 283

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ReactNative安全区域库在鸿蒙平台的适配实践

跨平台开发中,安全区域处理是移动应用适配异形屏的关键技术。通过系统级API获取窗口安全区域信息,开发者可以确保UI元素避开刘海屏、状态栏等系统保留区域。在鸿蒙生态与ReactNative技术栈融合的场景下,需要针对鸿蒙特有的窗口管理机制和设备形态进行适配优化。本文以react-native-safe-area-context库为例,详细解析了如何利用鸿蒙的@ohos.window模块实现安全区域计算,处理折叠屏状态切换、分布式多设备协同等典型场景。方案通过全局缓存和事件节流等优化手段,在Mate X3等设备

weixin_34268579的博客 573

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

在React Native中开发鸿组件基于HarmonyOS API 24 ,你需要了解鸿蒙开发的基础以及如何在React Native项目中集成鸿蒙应用。鸿蒙OS是由华为开发的一个分布式操作

在React Native中开发鸿组件(这里指的是鸿蒙(HarmonyOS)组件),你需要了解鸿蒙开发的基础以及如何在React Native项目中集成鸿蒙应用。鸿蒙OS是由华为开发的一个分布式操作系统,主要用于其智能设备,如手机、平板、智能手表等。首先,你需要熟悉鸿蒙OS的开发环境设置和基本开发流程。React Native本身主要用于Harmony和Harmony平台的开发,但你可以通过以下几种方式将鸿蒙应用集成到React Native项目中:A. 使用WebView。

2401_86113894的博客 322

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

基于HarmonyOS API 24 React Native跨平台鸿蒙开发实战系列:Bug修复 - requireNativeComponent:“RNCSafeAreaProvider“

在React Native中开发Harmony组件(Harmony组件这里指的是一个特定的组件,可能是指某个特定的功能或UI组件,例如一个记录管理组件),你可以遵循以下步骤。我将以一个简单的“最近查看记录管理”组件为例,展示如何实现它。步骤 1: 创建新的React Native项目步骤 2: 创建组件在src或components目录下创建一个新的React组件。例如,我们可以创建一个名为步骤 3: 使用组件在需要显示最近查看记录的页面中使用这个组件。例如,在App.js步骤 4: 运行你的应用。

wanmeijuhao的博客 89

0 基础入门React Native鸿蒙跨平台开发:HarmonyOS ArkTS API 24,监听Keyboard模块原生键盘事件以做出相应回应

Python 的方法解析顺序是基于 C3,这是为 Dylan 编程语言(http://opendylan.org)构建的。在早期版本的 Python 中,所有类并没有一个共同的祖先 object。这里 L[MyClass]是 MyClass 类的线性化,而 merge 是合并多个线性化结果的具体。在 Python 2 中,如果使用的是旧式类(不继承自 object),仍然存在这样的算法。例如,在(Base1,Python 所有的 2.x 版本中都保留了旧式类,目的是为了向后兼容,所以在这些版本中,如。

2301_77888392的博客 808

React Native跨平台技术在基于HarmonyOS API 24使用`react-native-vector-icons`来添加图标、`react-native-camera`来处理图像识别

本文介绍了开发"植物养护智能助手"React Native应用的完整指南。内容包括:1)环境准备(Node.js和React Native安装);2)依赖库安装(图标、相机等);3)项目结构规划;4)界面组件开发(首页和养护建议页示例代码);5)导航设置(使用React Navigation);6)真实案例演示(包含植物数据管理、图标渲染和模态框交互)。文章提供了详细的代码示例,帮助开发者快速构建一个具备植物养护提醒、光照建议等功能的移动应用。

wanmeijuhao的博客 315

React使用useState来维护组件的内部状态,React Native鸿蒙使用@State装饰器实现类似的状态管理机制,基于HarmonyOS API 24 状态变量变化来驱动UI的自动更新

http://www.wrox.com/books/访问,因此访问http://www.wrox.com/下的页面就不会发送cookie,即。这个头部设置一个名为"name"的cookie,这个cookie 在2007 年1 月22 日7:10:24 过期,对。www.wrox.com),也可以不包含(如.wrox.com 表示对wrox.com 的所有子域都有效)。求https://www.wrox.com 会发送cookie,而请求http://www.wrox.com则不会。这个值可能包含子域(如。

wanmeijuhao的博客 292

React Native鸿蒙版:SafeAreaView刘海屏适配

SafeAreaView是React Native提供的一个核心组件,用于确保内容显示在设备屏幕的"安全区域"内,避免被状态栏、导航栏或屏幕刘海等物理特征遮挡。在iOS设备上,它特别用于处理iPhone X及后续机型的刘海屏问题。从技术角度看,SafeAreaView通过查询设备的insets(内边距)值来自动调整其子组件的布局。这些insets值由操作系统提供,表示屏幕边缘到安全内容区域的距离。OpenHarmony 6.0.0采用了全新的UI框架,其核心组件关系如下:fill:#333;

2501_91746149的博客 684

基于HarmonyOS API 24 React Native鸿蒙跨平台如何实现今日打卡列表放在一个限定最大高度(300)的 ScrollView 里进行上下滑动效果

这个“轻食健康”页面选用 React Native 的核心原语组合出完整的打卡体验:今日打卡、健康贴士、历史记录与底部导航。它避免依赖平台特性与重量库,靠 SafeAreaView、ScrollView、View/Text、TouchableOpacity 的堆叠组织 UI;用受控状态与最小交互闭环(Alert)连接行为;用浅阴影、圆角与冷暖灰色系建立层次。

2401_86113894的博客 322

React Native鸿蒙跨平台通过 useState Hook 管理页面状态,基于HarmonyOS API 24,实现了目标详情查看和底部导航切换功能

说,这个 doctest 也是一个很好的文档,所以,应该发自内心地改变对 doctest 的用法。稍后,doctest 将演变以考虑新的元素或所需的变化。所以,doctests 和常规测试之间的平衡是一个饱受争议的问题,这取决于由团队,可读的和可用的,所以,它们可以是包文档的一部分,而那些不可读的,只是用于构建并。由于我们已经知道如何构建、打包和测试软件,在接下来的两章中,我们将关注如何。本章是关于优化的,并且提供一套一般原则和分析技术。“我们应该忘记小的效能,大约 97%的情况:过早优化是万恶之源。

2301_77888392的博客 447

React Native原生图标配置实战:性能、兼容性与鸿蒙适配

图标在跨平台移动开发中不仅是UI元素,更是影响首屏性能(LCP)、系统兼容性与热更新能力的关键资源。其本质是字体资源在原生渲染管线中的注册、映射与同步过程,涉及iOS的SF Symbols生态、Android的Typeface管理及鸿蒙OS的分布式字体加载机制。采用原生字体注入方案可将图标渲染耗时压缩至23ms,规避WebView碎片化与JS解析瓶颈,并支持动态主题、安全区域适配与离线热更。本文聚焦react-native-vector-icons深度配置,覆盖Xcode字体声明、Android NDK渲染

cishan3804的博客 484

基于HarmonyOS API 24,React Native鸿蒙跨平台使用MonthGrid 以 6×7 的总 42 单元策略生成网格完成一个完整的月历体验

虽然类的调用签名相当严格,但 Python 并不强制要求返回参数的类型。and eval in Python(参见 http://lucumr.pocoo.org/2011/2/1/exec-in-python/)。”换句话说,即使你有一丝的怀疑,也不应该使用它们,而应该尝试寻找其他解决方法。• exec(object, globals, locals):这一函数允许你动态执行 Python 代码。对于元编程而言,最有用的显然是 exec(),因为它可以执行任意 Python 语句的序列。

2401_86113894的博客 307
上一篇: mac 安装 nvm ,不影响DevEco使用的版本
下一篇: React Native的滑动手势功能
chenbin___
博客等级 码龄5年 85粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值