南平公司做网站,建立网站有什么用,360网站关键词排名优化,昆山新意建设咨询有限公司网站【每日学点HarmnoyOS Next知识】全局调整字体、h5选择框无法取消选中、margin不生效、Length转换为具体值、Prop和link比较
1、HarmonyOS 是否存在统一调整全局字体大小的方法#xff1f;
是否存在统一调整全局字体大小的方法
可以用动态属性#xff0c;自定义class实现At…【每日学点HarmnoyOS Next知识】全局调整字体、h5选择框无法取消选中、margin不生效、Length转换为具体值、Prop和link比较
1、HarmonyOS 是否存在统一调整全局字体大小的方法
是否存在统一调整全局字体大小的方法
可以用动态属性自定义class实现AttributeModifier接口把text需要固定的样式定义然后在页面的Text地方调用。
参考文档https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-attribute-modifier-V5
动态设置组件的属性支持开发者在属性设置时使用if/else语法且根据需要使用多态样式设置属性。
2、HarmonyOS web组件里的h5如果动态设置checkbox的checked属性后点击无法取消
H5上的confirm需要在web的onConfirm上监听参考以下代码:
import web_webview from ohos.web.webviewEntry
Component
struct WebComponent {controller: web_webview.WebviewController new web_webview.WebviewController()build() {Column() {Web({src: ,controller: this.controller}).overScrollMode(OverScrollMode.NEVER).width(100%).height(100%).onControllerAttached(() {this.controller.setCustomUserAgent(Mozilla/5.0 (Phone; OpenHarmony 4.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36 ArkWeb/4.1.6.1 Mobile Variflight/6.1.0)this.controller.loadUrl(https://openapi.variflight.com/html/module/cs/index.html#/detail?id323)}).onConfirm((event) {if (event) {console.log(event.url: event.url)console.log(event.message: event.message)AlertDialog.show({title: onConfirm,message: text,primaryButton: {value: cancel,action: () {event.result.handleCancel()}},secondaryButton: {value: ok,action: () {event.result.handleConfirm()}},cancel: () {event.result.handleCancel()}})}return true}).mixedMode(MixedMode.All).javaScriptAccess(true).domStorageAccess(true).overScrollMode(OverScrollMode.NEVER)}}
}3、HarmonyOS 父组件左右设置margin右侧margin没生效改成padding就可以了
父组件左右设置margin右侧margin没生效改成padding就可以了
margin作为外边距设置时子组件里的width百分比设置即为屏幕整个宽度的百分比然后再根据margin进行排布所以当子组件宽度合为100%后另外设margin会把子组件整体移动超过屏幕宽度。但是设置padding时子组件本身会先用屏幕宽度减去左右padding宽度然后剩下的宽度再乘百分比进行子组件显示。
4、HarmonyOS Length 如何转换为具体数值
.onAreaChange((oldValue,newValue){//this.totalWidthnewValue.width})
newValue.width 是length 转换成具体的数字
参考demo
.onAreaChange((oldValue: Area, newValue: Area) {let num: number 0num newValue.width as numberconsole.log(num.toString())num Number(newValue.width)console.log(num.toString())
})5、HarmonyOS Prop和 link的内存和效率对比使用大量数据深拷贝的时候使用link的开销是不是比prop小
Prop和 link的内存和效率对比使用大量数据深拷贝的时候使用link的开销是不是比prop小
Prop和 link存在数据同步的差异目前并不支持Prop和 link数据深拷贝操作但从实现方式看Prop的开销应该小于link方式Prop和 link 主要区别Prop装饰的变量必须使用其父组件提供的State变量进行初始化变量修改不会影响父组件UI刷新仅影响当前组件UI刷新Link装饰的变量也是来自父组件State修饰变量进行初始化变量修改不仅会影响当前组件UI刷新还会影响父组件UI刷新Link的底层触发逻
初始渲染执行父组件的build()函数后将创建子组件的新实例。初始化过程如下父组件中的State变量要求必须初始化父组件中State变量值会初始化给子组件的Link变量。子组件的Link变量值与其父组件的数据源变量保持同步双向数据同步。
父组件的State状态变量包装类通过构造函数传给子组件子组件的Link包装类拿到父组件的State的状态变量后将当前Link包装类this指针注册给父组件的State变量。父组件中状态变量更新引起相关子组件的Link的更新子组件Link包装类把当前this指针注册给父组件。
父组件State变量变更后会遍历所有依赖它的系统组件elementid和状态变量比如Link包装类通知他们更新数据。以此实现父组件对子组件的状态数据同步。当子组件中Link更新后处理步骤如下Link更新后调用父组件的State包装类的set方法将更新后的数值同步回父组件。
子组件Link和父组件State分别遍历依赖的系统组件进行对应的UI的更新。总结起来就是一句话父组件的状态变量和子组件的Link变量双向数据同步任何一边有变化都会同步给对方另外都是状态变量根据声明式的UI范式的机制关联的UI组件都会被重新渲染刷新。
参考文档https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-link-V5