廣州網(wǎng)站建站青島百度快速優(yōu)化排名
【每日學(xué)點(diǎn)HarmnoyOS Next知識(shí)】全局調(diào)整字體、h5選擇框無(wú)法取消選中、margin不生效、Length轉(zhuǎn)換為具體值、Prop和link比較
1、HarmonyOS 是否存在統(tǒng)一調(diào)整全局字體大小的方法?
是否存在統(tǒng)一調(diào)整全局字體大小的方法
可以用動(dòng)態(tài)屬性,自定義class實(shí)現(xiàn)AttributeModifier接口,把text需要固定的樣式定義,然后在頁(yè)面的Text地方調(diào)用。
參考文檔:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-attribute-modifier-V5
動(dòng)態(tài)設(shè)置組件的屬性,支持開(kāi)發(fā)者在屬性設(shè)置時(shí)使用if/else語(yǔ)法,且根據(jù)需要使用多態(tài)樣式設(shè)置屬性。
2、HarmonyOS web組件里的h5如果動(dòng)態(tài)設(shè)置checkbox的checked屬性后,點(diǎn)擊無(wú)法取消?
H5上的confirm需要在web的onConfirm上監(jiān)聽(tīng),參考以下代碼:
import web_webview from '@ohos.web.webview'@Entry
@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?id=323')}).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 父組件左右設(shè)置margin,右側(cè)margin沒(méi)生效,改成padding就可以了?
父組件左右設(shè)置margin,右側(cè)margin沒(méi)生效,改成padding就可以了
margin作為外邊距設(shè)置時(shí),子組件里的width百分比設(shè)置即為屏幕整個(gè)寬度的百分比,然后再根據(jù)margin進(jìn)行排布,所以當(dāng)子組件寬度合為100%后,另外設(shè)margin會(huì)把子組件整體移動(dòng),超過(guò)屏幕寬度。但是設(shè)置padding時(shí),子組件本身會(huì)先用屏幕寬度減去左右padding寬度,然后剩下的寬度再乘百分比進(jìn)行子組件顯示。
4、HarmonyOS Length 如何轉(zhuǎn)換為具體數(shù)值?
.onAreaChange((oldValue,newValue)=>{//this.totalWidth=newValue.width})
newValue.width 是length ,轉(zhuǎn)換成具體的數(shù)字?
參考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的內(nèi)存和效率對(duì)比,使用大量數(shù)據(jù)深拷貝的時(shí)候,使用link的開(kāi)銷是不是比prop小?
@Prop和 @link的內(nèi)存和效率對(duì)比,使用大量數(shù)據(jù)深拷貝的時(shí)候,使用link的開(kāi)銷是不是比prop小
@Prop和 @link存在數(shù)據(jù)同步的差異,目前并不支持@Prop和 @link數(shù)據(jù)深拷貝操作,但從實(shí)現(xiàn)方式看@Prop的開(kāi)銷應(yīng)該小于@link方式@Prop和 @link 主要區(qū)別:@Prop裝飾的變量必須使用其父組件提供的@State變量進(jìn)行初始化,變量修改不會(huì)影響父組件UI刷新,僅影響當(dāng)前組件UI刷新@Link裝飾的變量也是來(lái)自父組件@State修飾變量進(jìn)行初始化,變量修改不僅會(huì)影響當(dāng)前組件UI刷新,還會(huì)影響父組件UI刷新@Link的底層觸發(fā)邏:
初始渲染:執(zhí)行父組件的build()函數(shù)后將創(chuàng)建子組件的新實(shí)例。初始化過(guò)程如下:父組件中的@State變量要求必須初始化,父組件中@State變量值會(huì)初始化給子組件的@Link變量。子組件的@Link變量值與其父組件的數(shù)據(jù)源變量保持同步(雙向數(shù)據(jù)同步)。
父組件的@State狀態(tài)變量包裝類通過(guò)構(gòu)造函數(shù)傳給子組件,子組件的@Link包裝類拿到父組件的@State的狀態(tài)變量后,將當(dāng)前@Link包裝類this指針注冊(cè)給父組件的@State變量。父組件中狀態(tài)變量更新,引起相關(guān)子組件的@Link的更新:子組件@Link包裝類把當(dāng)前this指針注冊(cè)給父組件。
父組件@State變量變更后,會(huì)遍歷所有依賴它的系統(tǒng)組件(elementid)和狀態(tài)變量(比如@Link包裝類),通知他們更新數(shù)據(jù)。以此實(shí)現(xiàn)父組件對(duì)子組件的狀態(tài)數(shù)據(jù)同步。當(dāng)子組件中@Link更新后,處理步驟如下:@Link更新后,調(diào)用父組件的@State包裝類的set方法,將更新后的數(shù)值同步回父組件。
子組件@Link和父組件@State分別遍歷依賴的系統(tǒng)組件,進(jìn)行對(duì)應(yīng)的UI的更新??偨Y(jié)起來(lái)就是一句話:父組件的狀態(tài)變量和子組件的@Link變量,雙向數(shù)據(jù)同步,任何一邊有變化,都會(huì)同步給對(duì)方,另外都是狀態(tài)變量,根據(jù)聲明式的UI范式的機(jī)制,關(guān)聯(lián)的UI組件都會(huì)被重新渲染刷新。
參考文檔:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-link-V5