目录
HarmonyOS开发基础类问题FAQ
JS UI开发类问题FAQ
Java UI开发类问题FAQ
媒体、数据管理、权限类问题FAQ
1 Q:需要使用什么工具进行HarmonyOS应用开发?
A:可使用HUAWEI DevEco Studio(简称DevEco Studio)进行HarmonyOS应用开发。
1> DevEco Studio使用指南详见开发者文档
https://developer.harmonyos.com/cn/docs/documentation/doc-guides/software_install-0000001053582415
2> DevEco Studio使用常见问题详见开发者论坛置顶帖
https://developer.huawei.com/consumer/cn/forum/topic/0202363427916790029?fid=26
2 Q:HarmonyOS应用开发支持的系统有哪些?
A:当前DevEco Studio仅支持Windows和Mac版本,暂不支持linux版本。
3 Q:当前哪些设备支持HarmonyOS应用开发?
A:HarmonyOS开放的范围是面向128M以下内存的IoT设备,预计2021年会逐步上市携带HarmonyOS系统的手表、大屏和手机(PC暂时没有计划),敬请关注官网和2021年HDC大会信息,当前您可以使用模拟器调试运行。
4 Q:HarmonyOS的API哪里可以查看?
A:在HarmonyOS Developer官网可以访问HarmonyOS的API,详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/overview-0000001054119934
5 Q:如何快速入门HarmonyOS应用开发?
A:在HarmonyOS Developer官网有详细的入门指导,详见https://developer.harmonyos.com/cn/docs/documentation/doc-guides/start-overview-0000000000029602
6 Q:HarmonyOS SDK是否提供源码?
A: Harmony OS SDK不提供源码。其他源码详见https://gitee.com/openharmony
7 Q:HarmonyOS 应用开发支持哪些开发语言?
A:HarmonyOS 应用开发支持JS和Java,目前不支持python开发哦。
1 Q:JS UI框架开发哪里有详细的开发指导
A:JS UI框架介绍详见 https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-overview-0000000000500376
JS API参考可详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-overview-0000001056361791
2 Q:HarmonyOS JS开发会影响其运行性能吗?是类似于React-Native这样的UI框架的运行原理吗?
A:HarmonyOS的JS和react-native原理不一样。底层是一套UI自渲染框架,可跨平台 (比如PC端预览的效果和手表/TV端是同样的渲染路径,效果一致)。性能方面,目前一些典型的场景性能(比如图库、电商、长列表)基本都可以达到满帧。但由于JS语言本身性能的限制,不建议有复杂的JS逻辑运算。HarmonyOS也会持续进行整体性能相关的优化,欢迎持续关注。
3 Q:如何实现页面滑动?
A:实现页面滑动目前有三种方式:
1、scroll(根组件大小超过屏幕的大小即自动实现scroll效果);
2、list;
3、swiper。
开发者可以参考JS API查看三者的区别,并加以使用。详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/lite-wearable-container-swiper-0000001060406955
4 Q:list如何滚动到某个item?
A: 通过list的scrollto方法滚动到指定的item,参数是目标item的index。Index参数可以通过scrollend事件获取或者开发者指定。
5 Q:chart组件使用问题:在智慧屏上,gauge量规图很简单就实现了。但是bar柱状图和line线图却显示不出来,要怎么使用呢?
A: chart图标组件用于呈现线形图、柱状图界面。其使用可参看:https://developer.harmonyos.com/cn/docs/documentation/doc-references/lite-wearable-basic-chart-0000001060674856
chart使用示例代码如下:
hml代码片段:
type="line" ref="mychart" style="width:300px;height:200px;" options="{ {option}}" datasets="{ {dataset}}">
js代码片段:
data: {
title: '日历插件引用',
option:{
xAxis: {display:true,color:"#FFFFFF",max:100,axisTick:20},
yAxis: {display:true,color:"#FFFFFF",max:35},
series: {lineStyle:{smooth:true,width:"2px"},loop:{margin:100}}
},
dataset:[{strokeColor:"#A52A2A",data:[12,14,18,10,24,18,12,14,18,10,24,18,12,14,18,10,24,18]}]
}
6 Q:JS UI支持async和await语法吗?
A:JS UI支持async和await语法,使用时需要在js文件头部加入
const injectRef = Object.getPrototypeOf(global) || global;
injectRef.regeneratorRuntime = require('@babel/runtime/regenerator');
7 Q:JS UI开发中如何绑定input的值到data?
A:目前ACE框架还不支持双向绑定,建议通过监听input的onchange事件来实现input值和data值的同步变化 。
示例代码如下:
8 Q:如何使用非Index的页面作为entry,修改entry?
A:对于wearable工程和TV工程,首页的名字可以不是index, pages配置列表中的第1个page既是首页;对于litewearable工程,首页的名字必须是index
9 Q:列表渲染中的行内样式如何动态绑定?
列表渲染中的行内样式如何动态绑定, 现在行内样式不支持 style = "color:{ {$item.color}}" 这种写法, 如果要对不同的item渲染不同的颜色该怎么办?
A:
10 Q:JS UI开发时在config.js中配置多个js实例,那么页面怎么在多个js实例中跳转?
A:可以在页面的js文件中实现页面的跳转逻辑。调用router.push()接口将uri指定的页面添加到路由栈中,即跳转到uri指定的页面。在调用router方法之前,需要导入router模块。
可参看者文档中关于页面路由的使用介绍,详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/lite-wearable-routes-0000001056203160
11 Q:JS UI框架下,video组件如何播放HLS?video组件直接src饮用m3u8地址的话,显示打开文件失败。个别点播的m3u8地址正常,大部分点播和直播都不行。
A:目前video组件没有相关的解码流,所以还不支持video组件利用src直接引用m3u8直播,请关注后续能力的开放。
12 Q:图片资源怎么加载,在hml里面直接设置image的src路径="/image/3.png"无法显示图片。
A:default目录下建一个common文件夹,把图片放进去。然后 就可以了。
可查看开发指南的例子,链接:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-js-building-ui-layout-image-0000000000561509
13 Q:组件stack怎么使用?
A:stack组件相当于android的RelativeLayout 相对布局。stack组件的使用可参看API文档,连接:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-container-stack-0000000000611521
14 Q:picker自定义选择器是哪个?
A:picker自定义选择器使用picker-view组件。
15 Q:JS UI框架中怎么在JS文件中修改dom元素的style?
A:如果style样式在hml中已经写死,比如style="width: 10px",这种方式是无法动态修改的;如果style样式在hml中动态配置,如style="width: { {width}}",可以在js文件中动态修改属性值。
16 Q:组件的方法和事件的区别?
A:事件是是需要监听并且用户触发才会生效,如:
click 点击动作触发事件
longpress 长按动作触发事件
swipe 向上快速滑动触发事件
组件的方法是可以主动去调用的,调用立即生效,如:
list.scrollTo({
index:number
})
17 Q:JS开发框架中,list组件支持Map类型的动态数据绑定吗???
A:list组件支持Map类型的动态数据,如下就是绑定动态数据样式:
{$item.title} {$item.data}
18 Q:swiper组件设置loop=“true”自动播放不生效
A:loop用于配置是否循环播放,autoplay才是用于配置子组件是否自动播放,swiper组件的使用可参看API:https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-components-container-swiper-0000000000611533
19 Q:自定义控件中如何刷新canvas?
A:如customView为自定义组件,刷新组件方法如下:
customView.invalidate();
1 Q:Java UI框架开发哪里有详细的开发指导
A:Java UI框架介绍详见https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-overview-0000000000500404
Java API参考可详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/overview-0000001054518434
2 Q:XML布局增加一个图片怎么实现?
A:资源引用方式: $media:icon。
注意 Android是@media/xxx; HarmonyOS是 $media:xxx。资源文件的使用介绍可详见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-resource-file-example-0000001051733014
3 Q:TV程序完成后UI上方的TitleBar如何隐藏?
A:在confi.json中添加如下描述:
"metaData":{
"customizeData":[
{
"name": "hwc-theme",
"value": "androidhwext:style/Theme.Emui.NoTitleBar",
"extra":""
}
]
}
4 Q:整个Page的页面(Window)如何设置大小(类似windows的窗口的大小修改)?
A:在布局文件中配置ohos:width 和 ohos:height即可设置控件的高和宽。
Java UI的使用指导可参见https://developer.harmonyos.com/cn/docs/documentation/doc-guides/ui-java-overview-0000000000500404
5 Q:跳转到一个新的AbilitySlice,如何传递一个对象类型的参数?
A:在Intent中,将要传递的对象序列化了就可以了。网络上有视频讲解,可以参考:https://www.bilibili.com/video/BV12K411P7Mx
6 Q:HarmonyOS 应用日志怎么打印?
A: 日志打印的示例代码如下:
static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, MY_MODULE, "MY_TAG");
HiLog.warn(label, "Failed to visit %{private}s, reason:%{public}d.", url, errno);
详情可以参考下面的文档:
https://developer.harmonyos.com/cn/docs/documentation/doc-references/hilog-0000001054678857
7 Q:HarmonyOS toast怎么用?
A:关于Toast的使用,也建议看看源码,有很多使用小技巧,这里先给一个最简单的:
ToastDialog toastDialog = new ToastDialog(this);
toastDialog.setText("发生错误").setGravity(1).setDuration(1000).show();
可参看API,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-references/toastdialog-0000001054440045
8 Q:HarmonyOS Java模式的RadioButton组件,xml中为啥没有 checked属性?
A:sdk2.0后 xml中没有了checked属性,如果使用,可以在java代码中实现,radioButton.setChecked(true);
9 Q:Button样式怎么添加?
Button样式很丰富,什么圆角的,直角的,圆形的等等,这些样式要怎么添加进来还有编写格式要求。
A:在app目录下resources/base文件目录下创建graphic目录,如果要实现圆角等 需要编写xml文件 例如新建bg_common_unpress_btn.xml 如下:
ohos:shape="rectangle">
shape类型与android的shape类型相似。使用方式为 ohos:background_element="$graphic:bg_common_unpress_btn"。
可以参看开发者文档中的使用示例,链接:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/start-first-page-0000000000038014
10 Q:HarmonyOS UI界面网格布局怎么设置
HarmonyOS UI界面网格布局要怎么开发?需要同时满足一下3点要求
1.数据列或者行超出屏幕范围,要怎么设置列表可滚动,才能滑动屏幕查看超出部分?
2.怎么让不同行的相同列等宽?也就是需要列对齐
3.需要间隔一行设置整行背景色
我使用ListContainer和Tablelayout组件都实现不了,请问要如何实现?
A:
1.给Tablelayout高度或者宽度设置为match_content(如果你的列表是上下滑动的,那么高度就设置match_content),超出的部分能够自动滚动
2.列对齐是需要开发者自己实现的,给Tablelayout添加元素的时候,元素的大小需要开发者自己设置。可以使用可以使用weight来分割
3. 这个也需要开发者自己实现,实现的方式,比如:
for (i =0 ; i < length; i ++) {
if (i % 2 == 0) {
Component.setBackground(xxx);
} {
Component.setBackground(xxx);
}
Tablelayout.add(Component);
}
11 Q:JAVA UI中有没有在画布上绘制文字的方法?
A:Java中使用Canvas来绘制文字,可以使用Canvas下的drawText()这个方法来实现。
Canvas的使用可参看API:https://developer.harmonyos.com/cn/docs/documentation/doc-references/canvas-0000001054238731
12 Q:HarmonyOS组件滚动布局怎么设置?需要水平和垂直方向超出屏幕时都可以滚动
A:ScrollView支持竖直方向滑动,内嵌一个layout,orientation设置为vertical;
NestedScrollView支持水平方向滑动,内嵌一个layout,orientation设置为horizontal。
13 Q:HarmonyOS系统中java如何调用服务器接口发起请求?
A:HarmonyOS SDK内网络请求,首先申请harmonyos.permission.INTERNET权限 。HarmonyOS使用NetManager来进行网络管理,获取其单例对象,通过openConnection()来打开一个连接对象。后面的处理方式和JAVA URL网络请求方式一致。使用JS开发应用,需要引入fetch接口,使用JSON来发送请求。由于默认https协议,要使用http,需要在config.json中配置
"deviceConfig": {
"default": {
...
"network": {
"cleartextTraffic": true
}
}
}
14 Q:下拉框的选择器Picker,应该怎么设定值呢?
A:通过如下基础组件实现选择器:
1>Picker提供自定义选择器,选择器展示内容设置为String数组;
2>DatePicker提供默认日期选择器;
3>TimePicker提供默认时间选择器;
支持选中事件监听,选择元素变更事件监听。
15 Q:非UI线程如何更新UI?
在非UI线程中如何更新UI? 在一个新的线程中试图更新Text的文本,但是更新失败,如果更新后用鼠标拖动一下Text控件,则触发更新操作,是不是需要把更新操作写到UI线程中去执行?具体是哪个API?
A: 可以通过任务分发器TaskDispatcher来实现
TaskDispatcher uiTaskDispatcher = getUITaskDispatcher();
uiTaskDispatcher.asyncDispatch(() -> text.setText("Hello,Harmony!")); |
TaskDispatcher的开发指导,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/thread-mgmt-guidelines-0000000000032130
TaskDispatcher的API,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-references/taskdispatcher-0000001054518794
16 Q:Java UI开发框架中Image控件如何切换图片?
A:Image的setImageAndDecodeBounds方法可以改变显示的图片
Image控件API,详见https://developer.harmonyos.com/cn/docs/documentation/doc-references/image-0000001054120045
17 Q:JAVA UI开发下拉列表组件是哪个?
A:Java UI框架目前不支持下拉列表组件
18 Q:怎么样通过ResourceTable获取资源数据?如Text中setTextColor,setTextSize方法,想要引用资源数据中的值该怎么处理,有办法做到像Android那样可以通过资源文件getResources就可以根据name获取到对应的值引用的。
A:使用ResourceManager.getElement(ResourceTable.String_xxx).getXXX()来获取相应的资源。
具体可以参考ResourceManager相关的api文档:https://developer.harmonyos.com/cn/docs/documentation/doc-references/resourcemanager-0000001054358863
19 Q:点击跳转到新页面,返回后,为什么点击事件不再起作用?
A:页面跳转或者被覆盖以后,会进入onInactive,此时资源会释放掉,再回去onActive的时候,需要重新获取资源,建议按照如下方式进行调用:
button = (Button) findComponentById(ResourceTable.Id_button);
button2 = (Button) findComponentById(ResourceTable.Id_button2);
将上面两行代码放在onActive()中,这样不管怎么跳转,资源都不会失效
一、媒体
1 Q:如何用Java播放本地视频?
A:开发者你好,在HarmonyOS开发者文档里面有详细的关于视频播放的开发指导,可详见https://developer.harmonyos.com/cn/docs/documentation/doc-guides/media-video-player-0000000000044178
2 Q:参看AudioDeviceDescriptor的API编写代码播放一段mp3音频时,总是没有声音
A : AudioDeviceDescriptor不是支持音视频播放的接口类。目前HarmonyOS提供的可播放mp3格式的sdk接口是harmonyos.media.player.Player。示例代码如下:
try (FileInputStream in = new FileInputStream(new File(PLAYER_TEST_FILE))) {
FileDescriptor fd = in.getFD();
Source source = new Source(fd);
Player impl = new Player();
impl.setSource(source);
impl.prepare();
impl.play();
} catch (IOException e) {
// ...
}
可在HarmonyOS开源API中查阅次API用法.
二、数据管理
1 Q:HarmonyOS hap怎么访问sqlite数据库?
A:开发者你好,在HarmonyOS开发者文档里面有详细的关于HarmonyOS关系型数据库的介绍及使用,详见:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/database-relational-guidelines-0000000000030051
三、权限
1 Q:通过get请求访问网络失败,提示Attempt to invoke virtual method,怎么解决?
A:在config.json中配置申请harmonyos.permission.ACCESS_NETWORK_STATE权限
2 Q:config.json文件里reqPermissions应该配置在哪个地方?
A:你好,开发者文档中“开发基础知识”有介绍config.json各个字段的信息,详见表module内部结构,希望可以帮到您。
链接:https://developer.harmonyos.com/cn/docs/documentation/doc-guides/basic-config-file-elements-0000000000034463
3 Q:使用网络图片,运行应用无法加载图片,但是用本地化图片(使用common路径),应用成功加载图片
A:加载网络图片需要授权:ohos.permission.INTERNET