【每日学点鸿蒙知识】Grid子项拖动、Swiper指示器、手势事件上报、指定使用发布版本API、打包签名失败报错109
1、HarmonyOS Grid组件子项拖动问题?
Grid组件中有20个GridItem子组件,其中前4个GridItem是不能拖动的,其余GridItem可拖动排序。
关于可拖拽grid及gridItem可参考如下代码(注:其中 .draggable(parseInt(day) <= 6 ? true : false)为前6个griditem不可拖动):
@Entry @Component struct GridExample {
@State numbers: string[] = []
scroller: Scroller = new Scroller()
@State text: string = 'drag'
@Builder
pixelMapBuilder() { //拖拽过程样式
Column() {
Text(this.text)
.fontSize(16)
.backgroundColor(0xF9CF93)
.width(80)
.height(80)
.textAlign(TextAlign.Center)
}
}
aboutToAppear() {
for (let i = 1; i <= 15; i++) {
this.numbers.push(i + '')
}
}
changeIndex(index1: number, index2: number) { //交换数组位置
let temp: string;
temp = this.numbers[index1];
this.numbers[index1] = this.numbers[index2];
this.numbers[index2] = temp;
}
build() {
Column({ space: 5 }) {
Grid(this.scroller) {
ForEach(this.numbers, (day: string) => {
GridItem() {
Text(day)
.fontSize(16)
.backgroundColor(parseInt(day) <= 6 ? Color.Red : Color.Green)
.width(80)
.height(80)
.textAlign(TextAlign.Center)
}
.draggable(parseInt(day) <= 6 ? true : false)
})
}
.supportAnimation(true)
.columnsTemplate('1fr 1fr 1fr')
.columnsGap(10)
.rowsGap(10)
.width('90%')
.backgroundColor(0xFAEEE0)
.height(300)
.editMode(true)
//设置Grid是否进入编辑模式,进入编辑模式可以拖拽Grid组件内部GridItem
.onItemDragStart((event: ItemDragInfo, itemIndex: number) => { //第一次拖拽此事件绑定的组件时,触发回调。
this.text = this.numbers[itemIndex]
return this.pixelMapBuilder() //设置拖拽过程中显示的图片。
})
.onItemDrop((event: ItemDragInfo, itemIndex: number, insertIndex: number, isSuccess: boolean) => {
//绑定此事件的组件可作为拖拽释放目标,当在本组件范围内停止拖拽行为时,触发回调。 // isSuccess=false时,说明drop的位置在grid外部;insertIndex > length时,说明有新增元素的事件发生
if (!isSuccess || insertIndex >= this.numbers.length) {
return
}
this.changeIndex(itemIndex, insertIndex)
})
}
}
2、HarmonyOS Swiper指示器?
使用Swiper的DotIndicator.bottom(0)无法让指示器在底部,总有一个边距在。
swiper组件indicator属性设置:left,top,right,bottom设置导航点距离Swiper组件距离。indicator自身有宽高,所以在设置后不能完全贴边。
3、HarmonyOS 手势事件上报问题?
由于需要做视频播控手势,滑动屏幕控制音量、亮度和进度,和显示播控界面。因此有一些手势冲突,有下边这种需求,帮忙看一下应该如何写这个事件,通过看文档这么写的,不过不太好用。
Stack() {
Column() {
}
.gesture(PanGesture()) // 期望能够透传到这个地方
Column() {
this.top()
Blank()
.parallelGesture(null, GestureMask.IgnoreInternal) // 期望能够把这个手势事件透传给上边的组件
this.bottom()
}
.parallelGesture(null, GestureMask.IgnoreInternal)
}
可以参考hitTestBehavior实现手势透传
4、HarmonyOS 打包的时候如何指定使用发布版本API?
使用DevEco Studio打包 release 包(Build APP), pack.info信息中显示 apiVersion - releaseType 的值是"Beta1", 在使用该包尝试上架的时候,提示请使用发布版本的API开发应用申请上架。 请问打包的时候如何指定使用发布版本API。
找到 的sdk下的hms\toolchains这个目录,有个uni-package.json文件,修改releaseType 为 Release,可参考如下案例:
{
"apiVersion": "11",
"displayName": "Toolchains",
"meta": {
"metaVersion": "3.1.0"
},
"path": "toolchains",
"platformVersion": "4.1.0",
"releaseType": "Release",
"version": "4.1.0.71"
}
修改成功后,重新打包,再构建时会把这个配置文件的ReleaseType值打进去
检查方法:build下的outputs的default的pack.info里面查看apiversion里的releaseType 是否为 Release
在AGC软件包管理处重新上传修改后的软件包,重新提交审核。
5、HarmonyOS 1code:109?
参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-faqs-V5/faqs-compiling-and-building-101-V5