在大家HarmonyOS开发中,Webview组件上添加组件可能是很常见的功能了,HarmonyOS的webview和Android的webwiew存在一点点区别,今天来实现这个功能

  1. 使用项目布局显示webview搭建和webview加载链接的基本功能

  2. 解决webview覆盖层不显示问题

  3. 查看运行效果

基础的webview学习,大家参考如下链接 :

https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-component-webview-0000001092715158

第一步 使用DependentLayout 简单大家一个layout布局界面


<?xml version="1.0" encoding="utf-8"?> <DependentLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical" ohos:alignment="bottom"> <ohos.agp.components.webengine.WebView ohos:id="$+id:webview" ohos:height="match_parent" ohos:width="match_parent"> </ohos.agp.components.webengine.WebView> <Image ohos:id="$+id:myImage" ohos:height="100vp" ohos:width="100vp" ohos:image_src="$media:icon"/> </DependentLayout>

Java代码如下:


package com.harmony.alliance.mydemo.slice; import com.harmony.alliance.mydemo.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.DirectionalLayout; import ohos.agp.components.webengine.*; import ohos.media.image.ImagePacker; import ohos.media.image.PixelMap; import ohos.media.image.common.PixelFormat; import ohos.media.image.common.Size; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class MainAbilitySlice extends AbilitySlice { private static final String EXAMPLE_URL = "https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-distributed-migration-0000001050024965"; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); // dl_bottom.requestForceForwardTouchEvent() WebView webView = (WebView) findComponentById(ResourceTable.Id_webview); webView.getWebConfig().setJavaScriptPermit(true); // 如果网页需要使用JavaScript,增加此行;如何使用JavaScript下文有详细介绍 webView.getWebConfig().setWebStoragePermit(true); webView.getWebConfig().setDataAbilityPermit(true); webView.getWebConfig().setLoadsImagesPermit(true); webView.getWebConfig().setMediaAutoReplay(true); webView.getWebConfig().setLocationPermit(true); webView.getWebConfig().setSecurityMode(WebConfig.SECURITY_SELF_ADAPTIVE); webView.load(EXAMPLE_URL); // HiLogUtils.PrintLog("webView.load======>>>"+EXAMPLE_URL); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } }

运行效果如下

第二步解决Webview覆盖层不显示的问题

这时候我们发现没有达到我想实现的效果,我们应该怎么解决呢?

2.1我们需要添加如下代码


private void setWindowBgToAdaptWebView() { final String backgroundFileName = "_bg.jpg"; File file = new File(getContext().getFilesDir(), backgroundFileName); if (file.exists()) { getWindow().setBackground(file.getPath()); return; } PixelMap pixelMap = createBgPixelMap(); if (pixelMap == null) { return; } ImagePacker imagePacker = ImagePacker.create(); try (OutputStream outputStream = new FileOutputStream(file)) { ImagePacker.PackingOptions options = new ImagePacker.PackingOptions(); if (!imagePacker.initializePacking(outputStream, options)) { return; } if (!imagePacker.addImage(pixelMap)) { return; } if (imagePacker.finalizePacking() < 0) { return; } } catch (IOException e) { e.printStackTrace(); } finally { imagePacker.release(); } getWindow().setBackground(file.getPath()); } private PixelMap createBgPixelMap() { final int length = 10; PixelMap.InitializationOptions initializationOptions = new PixelMap.InitializationOptions(); initializationOptions.size = new Size(length, length); initializationOptions.pixelFormat = PixelFormat.ARGB_8888; initializationOptions.editable = true; int[] defaultColors = new int[length * length]; return PixelMap.create(defaultColors, initializationOptions); }

2.2我们要在OnStart的方法添加如下代码

全部代码如下


package com.harmony.alliance.mydemo.slice; import com.harmony.alliance.mydemo.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; import ohos.agp.components.DirectionalLayout; import ohos.agp.components.webengine.*; import ohos.media.image.ImagePacker; import ohos.media.image.PixelMap; import ohos.media.image.common.PixelFormat; import ohos.media.image.common.Size; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; public class MainAbilitySlice extends AbilitySlice { private static final String EXAMPLE_URL = "https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-distributed-migration-0000001050024965"; @Override public void onStart(Intent intent) { setWindowBgToAdaptWebView(); super.setUIContent(ResourceTable.Layout_ability_main); // dl_bottom.requestForceForwardTouchEvent() WebView webView = (WebView) findComponentById(ResourceTable.Id_webview); webView.getWebConfig().setJavaScriptPermit(true); // 如果网页需要使用JavaScript,增加此行;如何使用JavaScript下文有详细介绍 webView.getWebConfig().setWebStoragePermit(true); webView.getWebConfig().setDataAbilityPermit(true); webView.getWebConfig().setLoadsImagesPermit(true); webView.getWebConfig().setMediaAutoReplay(true); webView.getWebConfig().setLocationPermit(true); webView.getWebConfig().setSecurityMode(WebConfig.SECURITY_SELF_ADAPTIVE); webView.load(EXAMPLE_URL); // HiLogUtils.PrintLog("webView.load======>>>"+EXAMPLE_URL); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } private void setWindowBgToAdaptWebView() { final String backgroundFileName = "_bg.jpg"; File file = new File(getContext().getFilesDir(), backgroundFileName); if (file.exists()) { getWindow().setBackground(file.getPath()); return; } PixelMap pixelMap = createBgPixelMap(); if (pixelMap == null) { return; } ImagePacker imagePacker = ImagePacker.create(); try (OutputStream outputStream = new FileOutputStream(file)) { ImagePacker.PackingOptions options = new ImagePacker.PackingOptions(); if (!imagePacker.initializePacking(outputStream, options)) { return; } if (!imagePacker.addImage(pixelMap)) { return; } if (imagePacker.finalizePacking() < 0) { return; } } catch (IOException e) { e.printStackTrace(); } finally { imagePacker.release(); } getWindow().setBackground(file.getPath()); } private PixelMap createBgPixelMap() { final int length = 10; PixelMap.InitializationOptions initializationOptions = new PixelMap.InitializationOptions(); initializationOptions.size = new Size(length, length); initializationOptions.pixelFormat = PixelFormat.ARGB_8888; initializationOptions.editable = true; int[] defaultColors = new int[length * length]; return PixelMap.create(defaultColors, initializationOptions); } }

第三步查看运行效果

这时候我们在看一下运行效果

更多精彩内容,请见华为开发者官方论坛→https://developer.huawei.com/consumer/cn/forum/home?ha_source=sanfang

【HarmonyOS】【Demo】【JAVA UI】 鸿蒙怎么在Webview上添加组件的更多相关文章

  1. cocos2d-x 3.4版本,videoPlayer和webView上添加sprite等cocos控件

    本帖源于小弟自己在项目过程中为了解决在cocos2d-x中实现ios里videoPlayer自定义控件的需求,所以挖出来大神的一个帖子http://www.cocoachina.com/bbs/rea ...

  2. HarmonyOS Java UI之DirectionalLayout布局

    在之前的章节中我使用的是Java 代码构建UI界面,从本节开始,将使用XML构建UI界面. 使用XML构建UI(默认你已经会在项目中创建XML布局文件)界面相对Java代码构建的好处是:结构清晰,代码 ...

  3. HarmonyOS Java UI之DependentLayout布局示例

    DependentLayout简介 DependentLayout意为相对位置布局,与DirectionalLayout相比较有更多的排布方式,每个组件可以指定相对于其他同级组件的位置,也可以指定相对 ...

  4. WebView 上传文件 WebChromeClient之openFileChooser函数

    原链接:http://blog.saymagic.cn/2015/11/08/webview-upload.html?utm_source=tuicool&utm_medium=referra ...

  5. Java Project部署到Tomcat服务器上

    所有的JAVA程序员,在编写WEB程序时,一般都通过工具如 MyEclipse,编写一个WEB Project,通过工具让这个WEB程序和Tomcat关联.其实在我们可以通过JAVA程序部署到Tomc ...

  6. 【Java Spring Cloud 实战之路】添加一个SpringBootAdmin监控

    0. 前言 在之前的几章中,我们先搭建了一个项目骨架,又搭建了一个使用nacos的gateway网关项目,网关项目中并没有配置太多的东西.现在我们就接着搭建在Spring Cloud 微服务中另一个重 ...

  7. 面向UI编程:ui.js 1.1 使用观察者模式完成组件之间数据流转,彻底分离组件之间的耦合,完成组件的高内聚

    开头想明确一些概念,因为有些概念不明确会导致很多问题,比如你写这个框架为什么不去解决啥啥啥的问题,哎,心累. 什么是框架? 百度的解释:框架(Framework)是整个或部分系统的可重用设计,表现为一 ...

  8. java~gradle构建公用包并上传到仓库

    java~gradle构建公用包并上传到仓库 我们一般会把公用的代码放在一个包里,然后其它 项目可以直接使用,就像你使用第三方包一样! 仓库 存储包的地方叫做仓库,一般可以分为本地仓库和远程仓库,本地 ...

  9. java~gradle构建公用包并上传到仓库~使用私有仓库的包

    在新的项目里使用仓库的包 上一讲中我们说了java~gradle构建公用包并上传到仓库,如何发布公用的非自启动类的包到私有仓库,而这一讲我们将学习如何使用这些包,就像我们使用spring框架里的功能包 ...

随机推荐

  1. 如何用微信小程序,每天给自己赚个鸡腿?

    假期如果实在无聊的话,那跟随田同学的脚步上架一个小程序吧. 话说:谁不想拥有一个自己的小程序呢?既可以赚点小钱又可以长长见识. 不懂小程序的小白能不能做出来呢?那来对了,这个教程就是针对小白的. 今天 ...

  2. 微服务架构攀登之路(二)之RPC

    1. RPC 简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...

  3. 【Java常用类】String

    文章目录 String String实例化的方式 方式一:通过字面量定义 方式二:new + 构造器的方式 String s = new String("abc")方式创建对象,在 ...

  4. Java库中的LocalDate类

    Java库中的LocalDate类 类库设计者决定将保存时间与给时间点命名分开.所以标准Java类库分别包含了两个类:一个用来表示时间点的Date类:另一个是用来表示大家熟悉的日历表示法的LocalD ...

  5. 2022 跳槽涨薪必不可少面试通关宝典 —— css 篇

    生于忧患死于安乐!已经居家隔离 23 天了,解封以后估计就得找工作了,提前准备起来!需要的赶紧收藏起来 一.谈谈你对 BFC 的理解及作用. BFC 是 Block Formatting Contex ...

  6. 第56篇-ProfileData与DataLayout

    某些指令需要创建某些实例,如下: 指令 对应的DataLayout._struct._tag值 _checkcast._instanceof._aastore receiver_type_data_t ...

  7. js复制标题和链接

    问题 常常在写博客和作业时候,需要附上参考链接. 希望可以一键得到标题和链接. 解决方案 普通元素 可以使用findid然后复制 但是标题无法使用 <!DOCTYPE html> < ...

  8. 分享一个学习cesiumjs的中文社区

    在cesiumjs中文社区的时间线中我写到: 2018年10月10日 注册用户数51,日uv破100 Mark截图 2018年06月22日 上线测试 2018年06月19日 获得cesiumcn.or ...

  9. Python中hash加密

    目录 简介 概念 特点 hash有哪些 算法碰撞 加盐防碰撞 加密 hashlib 主要方法 特有方法 使用方法 加盐 crypt 主要方法 使用说明 应用 密码加密 应用一致性校验 简介 概念 散列 ...

  10. QT之键盘事件

    Widget.h: #ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QKeyEvent> #incl ...