【官方总结】HarmonyOS应用开发常见问题FAQ

目录

HarmonyOS开发基础类问题FAQ  

JS UI开发类问题FAQ 

Java UI开发类问题FAQ  

 媒体、数据管理、权限类问题FAQ 


HarmonyOS开发基础类问题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开发哦。

 

JS UI开发类问题FAQ 

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渲染不同的颜色该怎么办?

【官方总结】HarmonyOS应用开发常见问题FAQ_第1张图片

A:{ {$item.name}}这样写没错,但是在js data中定义color的时候不能用枚举,要用十六进制颜色码。

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();

 

Java UI开发类问题FAQ  

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样式很丰富,什么圆角的,直角的,圆形的等等,这些样式要怎么添加进来还有编写格式要求。

               ohos:id="$+id:button"
       ohos:width="match_content"
       ohos:height="match_content"
       ohos:left_margin="88vp"
       ohos:right_margin="88vp"
       ohos:top_margin="70vp"
       ohos:text_size="19fp"
       ohos:text="点我"
       ohos:background_element="$graphic:color_blue_element" //按照网上提示,编译报错
       ohos:text_color="white"
       />

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()中,这样不管怎么跳转,资源都不会失效

 

 媒体、数据管理、权限类问题FAQ 

一、媒体

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

你可能感兴趣的:(鸿蒙OS百科)