论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
大数据
›
数据仓库与分析
›
从零开始开辟纯血鸿蒙应用之实现内部文件处理页 ...
从零开始开辟纯血鸿蒙应用之实现内部文件处理页
数据人与超自然意识
金牌会员
|
2025-1-5 22:30:14
|
显示全部楼层
|
阅读模式
楼主
主题
906
|
帖子
906
|
积分
2718
一、媒介
在上一篇,我将 TxtEdit 的起始页的实现进行了分享,现在,接着分享 内部文件处理页的实现。
内部文件与外部文件的最大区别,在于内部文件的存储位置,是明白而固定的,因此,只要有文件名便可以进行文件的创建、再编辑、浏览与删除,而无需完备的沙箱URI,这一点是外部文件所无法具有的。
内部文件处理页,分为 EditPage 和 ViewFilePage,前者用于文件的新建和再编辑,后者用于文件的只读浏览。
二、EditPage
首先,看一下代码的团体内容:
1、文件保存对话框
遵照从上到下的顺序,先看一下
文件保存对话框
的具体实现:
这次使用自定义弹窗样式,与之前的 MessageDialog 不一样,是一个专门用于文件保存的 SaveFileDialog,并且会通过函数参数 confirm 载入文件保存逻辑,其具体的实当代码如下:
这里,重点关注一个新的鸿蒙组件TextPicker的使用,这是一个
文本选择器
,大家在填写地点信息时见到的,从一组候选省市区选择出目标省市区的操作,在鸿蒙app中,就可以用这个组件去实现:
TextPicker 组件,针对候选文本的选中、未选中和消失状态,分别提供属性selectedTextStyle、textStyle 和 disappearTextStyle 进行样式定义。
文件名的填写和文件后缀的选择,都是在 SaveFileDdialog 中,然而,文件保存逻辑的实当代码,却是在它的父级组件中,那么问题就来了,子组件更新的数据如何回传到父组件中呢?ArkTS 语言又不是 C/C++,参数传递并不存在引用传递类型,都是值传递类型,但这也只是针对普通字段而言的。
鸿蒙UI框架,为了满意数据在父子组件的单向传递或双向传递,提供了一组状态装饰器:
在 SaveFileDialog 里面,就用状态装饰器 @Link,去完成文件名和文件后缀的回传。
在父组件也即 EditPage 中,确认按钮的处理逻辑由下面几个步调构成:
1)判定文件名是否不为空,不为空才进行后续步调,否则就 Toast 提示用户输入文件名
2)判定待保存的文件内容是否不为空,假如为空则 Toast 提示,反之则进入文件保存逻辑
3)在保存文件前,会根据用户输入的文件名和选择的文件后缀,拼接出完备的 Filename,并调用 FileUtil.saveToFile 进行保存
4)在文件保存乐成时,弹出 Toast 提示,并设置文件列表刷新信号,然后回到起始页。
2、EditPage 初始化
在 位于 dialog 字段下方的 aboutToAppear 函数中,进行页面进入类型的判定,即根据路由是否携带非空的文件名,判定当进步入是文件再编辑还是文件新建:
当进入动作属于文件再编辑,也即路由携带了文件名,就会进行对应文件的内容读取,并表现在 TextArea 中,供用户再次编辑文件内容。
2、实现内容编辑功能
对于文件这种涉及多行文本编辑的场景,实现功能所用的组件,不应该是 TextInput,必须是 TextArea,同时,为了方便用户在完成内容编辑后收起键盘,应该提供类似
点击空白区域收起输入法的功能
:
主动收起键盘,实在,就是要动态设置 TextArea 的 focusable 属性,便是否答应组件获取核心,当 TextArea 被设置为不答应获得核心,自然就不能进入编辑状态,输入法也就自然会收起软键盘,接着只需通过一个倒数时间较短的 setTimeout 回调恢复 TextArea 答应获得核心,便能恢复编辑本事。
由于 TextArea 占据了页面标题之后,到输入法软键盘为止的屏幕区域,因此,我将触发输入法收起软键盘的点击区域,放在了页面标题栏上。说到页面标题栏,需要载入页面返回功能和菜单交互逻辑:
由于,暂时还没想好 EditPage 应该提供什么样的右上角菜单,所以,右上角菜单的动作处理,只是弹出 Toast 提示。
3、避让键盘
由于 EditPage 是编辑内容的页面,因此,需要处理避让键盘的问题,假如不进行避让键盘处理,那么,当文件内容比力多时,就会出现这种情况:
位于页面上方的标题栏被输入法的软键盘,给顶到屏幕可视区域外,看起来相称不好看,而参加避让键盘处理后,就不会出现这种情况:
那么,避让键盘如何实现呢?
在 API 12 之后,只需要在页面的根容器上,用属性 expandSafeArea 设置即可:
三、ViewFilePage
ViewFilePage 的实当代码,团体内容如下:
1、页面初始化
由于是文件内容浏览页,因此,需要在页面渲染之前,将对应的文件内容准备好:
2、条件渲染
文件即便存在,也不意味着内容也存在,所以,当文件内容为空的时候,直接展示一个提示信息即可:
当文件内容不为空时,就需要轻微复杂且答应肯定交互动作的 UI 实当代码,比如,当文件内容比力多,超出了屏幕可视区域,那么就要支持滑动交互,以便将屏幕外的内容滚进屏幕里:
此外,用户在浏览文件内容的时候,往往会有选择复制文本的习惯,因此,位于 Scroll 组件内的、用于展示文件内容的 Text 组件,我用上了新的属性和变乱。
3、copyOption属性
Text 组件要具备文本选择本事和文本复制本事,需要设置 copyOption 属性和变乱 onCopy,至于 onTextSelectionChange 变乱的捕获,在这里,仅仅是为了日记的打印。
3.1、正当候选值
该属性用于设置被复制的文本,在什么样 的范围内是有效、大概说是可用的,在 API 13 中,Text 组件的 copyOption 属性的正当候选值有如下:
我这里设置为 LocalDevice,如此,被复制的文本才能在谈天app,如畅连、微信以及QQ等应用的谈天信息输入框中进行使用。
这里需要夸大一点的是,Text 组件所展示的文本的复制,并不需要开辟者在 onCopy 变乱处理函数中,手动往体系剪贴板插入记录,鸿蒙体系主动会完成剪贴板记录的新增,所以,假如你不需要通过日记去记录用户的复制动作,onCopy 变乱完全可以不进行捕获的。
3.2、默认值
Text 组件的 copyOption 属性,具有默认值:
该默认值为 None,也即不答应复制,所以,鸿蒙app内禁止内容复制,对于文原来说,保持 Text 组件 copyOption 属性的默认值即可。
四、总结
实现上述两个页面后,TxtEdit 的业务功能基本实现了百分之五十,除了还无法处理外部文件,内部文件的创建、再编辑和浏览,乃至分享和删除,都已经具备了。
EditPage 的渲染结果,如下:
ViewFilePage 的则如下:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
正序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
发新帖
回复
数据人与超自然意识
金牌会员
这个人很懒什么都没写!
楼主热帖
4. 事务和锁
kubernetes使用学习(k8s)
【记录】Python爬虫|爬取空间PC版日志 ...
OSPF多区域
渗透测试02
2023团队天梯模拟赛 L2-3 智能护理中心 ...
Java Long类的bitCount()方法具有什么 ...
循序渐进介绍基于CommunityToolkit.Mvv ...
那些年你用过最好的键盘
【 安信可海思Hi-12F模组】AT指令入门 ...
标签云
存储
挺好的
服务器
快速回复
返回顶部
返回列表