1、HarmonyOS 输入法光标控制?
在onSubmit回调里写组件间的光标跳转。onSubmit回车之后【.enterKeyType(EnterKeyType.Next)】默认会把键盘关闭,我再去focusControl.requestFocus(nextKeyStr)就会呈现一个键盘先关闭再弹起的效果,这样看起来很不流畅,按理想状态来说,设置了EnterKeyType.Next点击‘下一步’应该是流畅的光标跳转到下一个输入框吧?但是onSubmit默认会关闭键盘。有什么办法解决流畅问题的?是要去自定义输入法吗?
- 在EntryAbility中
//将 onWindowStageCreate(windowStage: window.WindowStage): void方法替换为:onWindowStageCreate(windowStage: window.WindowStage): void {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Index', (err) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');AppStorage.setOrCreate('windowStage',windowStage);
});}
- 将Index.ets中代码替换为:
import { window } from '@kit.ArkUI'
@Entry
@Component
struct ListExample {private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]selectIndex:number = 0scroller: Scroller = new Scroller()@State keyboardHeight:number = 0aboutToAppear() {let windowClass: window.Window = (AppStorage.get('windowStage') as window.WindowStage).getMainWindowSync()windowClass.on('keyboardHeightChange', (data) => {this.keyboardHeight = px2vp(data)});}build() {Column() {List({ space: 20, initialIndex: 0,scroller:this.scroller }) {ForEach(this.arr, (item: number) => {ListItem() {Column(){Text('a' + item + '-' + this.keyboardHeight).width('100%').height(100).fontSize(16).textAlign(TextAlign.Center).borderRadius(10).backgroundColor(0xFFFFFF)TextInput().width('100%').height(80).margin({top:10}).id('a'+item).onFocus(()=>{console.log('focus: a'+item)this.selectIndex = itemconsole.log('aaa' + this.selectIndex)}).onSubmit((enterKey: EnterKeyType, event: SubmitEvent)=>{focusControl.requestFocus('a'+(this.selectIndex+1));this.scroller.scrollToIndex(this.selectIndex+1,true);event.keepEditableState();})}}}, (item: string) => item)}.listDirection(Axis.Vertical) // 排列方向.scrollBar(BarState.Off).divider({ strokeWidth: 2, color: 0xFFFFFF, startMargin: 20, endMargin: 20 }) // 每行之间的分界线.edgeEffect(EdgeEffect.Spring) // 边缘效果设置为Spring.width('90%').margin({ bottom: this.keyboardHeight })}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding({ top: 5 })}
}
2、HarmonyOS text组件如何实现部分圆角?
text组件如何实现部分圆角 咨询场景描述:text组件期望实现左下和右下位置圆角,左上和右上位置不进行圆角,请问该如何实现
可以添加borderRadius({bottomLeft : 10,bottomRight : 10})属性实现,参考demo:
@Entry
@Component
struct TextExample6 {@State text: string = '你叫什么名字'build() {Column() {Text(this.text).fontSize(16).border({ width: 1 }).lineHeight(20).maxLines(1).width(300).margin({ left: 20, top: 20 }).borderRadius({bottomLeft : 10,bottomRight : 10})}.margin({top : 200})}
}
3、HarmonyOS 浏览器 Web 组件如何获取缓存数据大小或缓存数据明细,如何删除本地缓存数据?
可以通过removeCache()接口清除已经缓存的资源,参考demo:
struct WebComponent {@State mode: CacheMode = CacheMode.None;controller: web_webview.WebviewController = new web_webview.WebviewController();build() {Column() {Button('removeCache').onClick(() => {try { // 设置为true时同时清除rom和ram中的缓存,设置为false时只清除ram中的缓存 this.controller.removeCache(true); } catch (error) {let e: business_error.BusinessError = error as business_error.BusinessError;console.error(`ErrorCode: ${e.code}, Message: ${e.message}`);}})Web({ src: 'www.huawei.com', controller: this.controller }).cacheMode(this.mode)}}
}
可以参考缓存方案文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cookie-and-data-storage-mgmt-V5
Cookie是网络访问过程中,由服务端发送给客户端的一小段数据。客户端可持有该数据,并在后续访问该服务端时,方便服务端快速对客户端身份、状态等进行识别。
当Cookie SameSite属性未指定时,默认值为SameSite=Lax,只在用户导航到cookie的源站点时发送cookie,不会在跨站请求中被发送。
Web组件提供了WebCookieManager类,用于管理Web组件的Cookie信息。Cookie信息保存在应用沙箱路径下/proc/{pid}/root/data/storage/el2/base/cache/web/Cookiesd的文件中。
4、HarmonyOS 设备上Grid 无法触发onReachEnd?
参考开发指南(代码)实现:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-grid-V5#ZH-CN_TOPIC_0000001930676589__edgeeffect10
使用.edgeEffect(EdgeEffect.Spring, { alwaysEnabled: true })这样就能触发回弹效果,同时也就能触发onReachEnd
5、HarmonyOS web加载本地html显示的为pc端网页效果?
head中添加meta即可 <meta name="viewport" content="width=device-width, initial-scale=1.0"\>