?本文将详细讲解HarmonyOs组件化项目搭建的全过程,带领大家实现一个组件化项目。 项目创建 首先创建一个项目工程,点击开发工具DevEco-Stdio的****File 选项,选择 New 然后点击 Create Project 。 选择创建一个EmptyAbility,然后直接下一步,创建
2025-06-09 14:58
Demo基于Open Harmony系统使用ETS语言进行编写,本Demo主要通过设备认证、分布式拉起、分布式数据管理等功能来实现。
2024-04-12 16:40
最近在日常开发过程中,需要实现城市选择功能,同时支持模糊搜索。看似简单的功能动手实现起来却有很多难点。本篇文章详细记录开发过程中遇到的问题和对应的解决方法,希望能够帮助你,建议点赞收藏!
2025-06-24 17:07
:【本文正在参与“有奖征文 | HarmonyOS征文大赛”活动】https://bbs.elecfans.com/jishu_2098584_1_1.html
2021-08-12 11:44
弹框组件在HarmonyOS当中,常用的弹框主要有两种:第一种是普通弹框(CommonDialog),提示用户并让用户进行对应的操作的,比如使用打车软件的时候,如果手机没有开定位,就会有弹框提示
2021-08-26 17:45
1. Clock时钟组件的基本使用组件说明:Text的子类,所以可以使用Text的一些属性。常用属性: 常见方法: 基本用法:xml 文件布局: 默认把当前时间作为一个展示,而且时间是不断走动的ohos:time_zone="GMT"是默认值24小时的格式 12小时的格式,Clock 组件默认是24小时制的,所以得把默认24小时制的关掉,用下面的12小时展示a 表示的是上午或下午 运行后,发现出现了bug 因为 Clock 组件是华为刚推出的,如果用 xml 直接指定他的属性,会出现一些小bug,不过24小时是没问题,如果使用属性的方式指定12小时计算方式,就会出现如上bug,下面就可以使用Java代码的形式来实现12小时的展示。Java 代码实现:实现12小时制如下,a 表示的是上午或下午 ability_main MainAbilitySlice //1.找到时钟组件Clock clock = (Clock) findComponentById(ResourceTable.Id_clock);//2.修改时钟组件展开的方式//默认是24小时//如果要按照12小时进行展示,需要先把24小时展示给关闭clock.set24HourModeEnabled(false);//3.指定12小时的展示格式clock.setFormatIn12HourMode("yyyy年MM月dd日 hh:mm:ss a");运行: 发现没有任何问题2. Clock时钟案例——24小时制和12小时制之间的转换点击按钮后,上面的24小时制的时间就会变成12小时制,再次点击后,上面的展示格式就会变成24小时制 需求:通过点击按钮,将时钟组件中的显示方式在24小时制和12小时制之间切换业务分析:页面上有时钟组件和一个按钮组件时钟组件默认是按照24小时制显示时间点击按钮可以切换到12小时制显示时间再次点击按钮可以切换到24小时制显示时间布局分析:布局中文本比较多,所以可以使用换行属性:ohos:multiple_lines="true",这个属性也是Text组件的属性,Clock组件也是Text住组件的子类,所以可以直接拿过来使用ability_main 点击按钮时,按钮里面的文本内容也要发生相应的变化,点击按钮后上面的时间制和按钮里的文本是相反的,如:默认是24小时制,点击的按钮文本内容是“改为12小时制”。时间改为12小时制后,按钮里面的文本就会变成“改为24小时制”相当于24小时制和12小时制的时间来回做个切换因为代码中要用到 clock 对象,所以得把他放到成员位置把上面Java实现展示12小时制的代码可以拿过来复用运行: 点击按钮后: 还有个问题就是:再次点击按钮后,上面的12小时制要变回24小时制,按钮里的内容也要变为“改为24小组制”在 onClick 方法当中要做两种方式的判断,在方法外做一个标记,类型可以使用boolean或int类型,boolean类型有两个值,只能表示两个状态,为了后期的扩展,这里使用 int 类型来做标记这个时候需要在 onClick 方法中使用 but 来改变按钮上的文本内容,所以把 but 提为成员变量 当点击了按钮执行 onClick 方法的时候,在方法中进行判断两者的状态就行了在24小时制中,小时用 H 来表示,而且不用 a 的MainAbilitySlicepackage com.xdr630.clockapplication.slice;import com.xdr630.clockapplication.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.components.Button;import ohos.agp.components.Clock;import ohos.agp.components.Component;public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { Clock clock; Button but; @Override public void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//1.找到时钟组件clock = (Clock) findComponentById(ResourceTable.Id_clock);//找到按钮组件but = (Button) findComponentById(ResourceTable.Id_but);//2.给按钮添加一个单击事件but.setClickedListener(this); } @Override public void onActive() {super.onActive(); } @Override public void onForeground(Intent intent) {super.onForeground(intent); } //如果为 0,表示24小时制 //如果为 1,表示12小时制 int flag = 0; @Override public void onClick(Component component) {if (flag == 0){//表示当前为24小时制//如果当前为24小时制,则修改为12小时制//默认是24小时//如果要按照12小时进行展示,需要先把24小时展示给关闭clock.set24HourModeEnabled(false);//3.指定12小时的展示格式clock.setFormatIn12HourMode("yyyy年MM月dd日 hh:mm:ss a");//修改按钮上的文字but.setText("改为24小时制");//修改标记对应的状态flag = 1;}else if (flag == 1){//当前是12小时制,要改为24小时制clock.set24HourModeEnabled(true);//修改展示格式clock.setFormatIn24HourMode("yyyy年MM月dd日 HH:mm:ss");//修改按钮上的文字but.setText("改为12小时制");//修改标记flag = 0;} }}运行: 点击按钮“改为12小时制” 再次点击按钮“改为24小时制”3. Clock组件扩展——指定开始运行的时间点在以后大多数用到的时间都是系统当前的时间,个别的情况是展示指定的时间在 xml 文件加上属性time,把属性值(毫秒值或时间戳)加在后面就行了0:表示时间从时间原点 1970-01-01 08:00:00 开始计算的,标准是1970-01-01 00:00:00,中国普遍使用东八区的时间,东八区的标准时间是比世界协调时间(UTC)/格林尼治时间(GMT)快8小时,跟标准时间是有8个小时的时差运行: 把时间设置为指定的时间百度:时间戳 时间戳:从时间原点开始到指定的时间,在这个过程当中一共经历了多少毫秒把刚刚转换的时间戳复制到 time 属性那里运行后,就是从自己指定的时间开始的
2021-09-06 15:52
1. ToastDialog 简介ToastDialog 是 CommonDialog 的子类,他们的用法几乎是一致的,只不过 ToastDialog 有自己的特性ToastDialog 的组成如下:标题、提示内容、选择按钮一般只会用中间的提示内容,因为 ToastDialog 出现的意义就是用来作消息提示的ToastDialog 弹框有自己的展示时间,默认展示 2 秒钟,时间到了之后弹框就会自动消失2. ToastDialog 案例案例:点击按钮弹出一个2秒的弹框提示信息ability_main MainAbilitySlicepackage com.xdr630.toastapplication.slice;import com.xdr630.toastapplication.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.components.Button;import ohos.agp.components.Component;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { @Override public void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//找到界面中的按钮Button but = (Button) findComponentById(ResourceTable.Id_but);//添加点击事件but.setClickedListener(this); } @Override public void onActive() {super.onActive(); } @Override public void onForeground(Intent intent) {super.onForeground(intent); } @Override public void onClick(Component component) {//出现一个 ToastDialog 弹框// this:表示当前的弹框展示在当前的界面ToastDialog td = new ToastDialog(this);//给ToastDialog设置要展示的文本内容td.setText("吐司弹框出现了");//设置居中td.setAlignment(LayoutAlignment.CENTER);//设置出现的时间,单位:毫秒。下面就是设置弹框时间只有两秒td.setDuration(2000);//让弹框出现td.show(); }}运行: 点击按钮,可以看到弹框提示信息出现了两秒后弹框消失注意事项:基本使用:ToastDialog t = new ToastDialog(this);t.setText("要显示的内容")t.setAlignment(LayoutAlignment.CENTER);t.show();相关设置:ToastDialog toastDialog = new ToastDialog(this);//设置的大小//如果不写,默认包裹内容toastDialog.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,DirectionalLayout.LayoutConfig.MATCH_CONTENT);//设置持续时间//如果不写,默认2秒toastDialog.setDuration(2000);//设置自动关闭//如果不写,就是自动关闭toastDialog.setAutoClosable(true);//设置位置//如果不写,默认居中toastDialog.setAlignment(LayoutAlignment.CENTER);//设置提示信息内容toastDialog.setText("要显示的内容");//让吐司展示出来toastDialog.show();3. ToastDialog 抽取工具类ToastDialog 扩展可以给ToastDialog弹框一个布局把ToastDialog抽取到一个工具类当中,以后用到弹框的时候就不需要再写了,直接调用工具类的方法就可以了案例:新建一个布局文件,名为:mytoast 把父类布局也改成 match_content在布局文件写一个文本就可以了,因为ToastDialog也只有一个文本提示因为在每次弹出消息的时候要修改文本里的内容,所以要给文本一个id,文本内容是变化的,所以要在Java代码那里设置mytoast.xml 新建工具包和类 ToastUtilspackage com.xdr630.toastapplication.MyToastUtils;import com.xdr630.toastapplication.ResourceTable;import ohos.agp.components.DirectionalLayout;import ohos.agp.components.LayoutScatter;import ohos.agp.components.Text;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;import ohos.app.Context;public class ToastUtils { public static void showDialog(Context context,String message){//1.把 xml 文件加载到内存当中DirectionalLayout dl = (DirectionalLayout) LayoutScatter.getInstance(context).parse(ResourceTable.Layout_mytoast, null, false);//2.获取到当前布局对象中的文本组件Text msg = (Text) dl.findComponentById(ResourceTable.Id_msg);//3.把需要提示的信息设置到文本组件msg.setText(message);//4.创建一个ToastDialog对象ToastDialog td = new ToastDialog(context);//设置弹框的大小,默认是包裹内容//宽高都要设置td.setSize(DirectionalLayout.LayoutConfig.MATCH_CONTENT,DirectionalLayout.LayoutConfig.MATCH_CONTENT);//设置出现的时间td.setDuration(2000);//设置对齐方式td.setAlignment(LayoutAlignment.CENTER);//把 xml 对象交给ToastDialogtd.setContentCustomComponent(dl);//让弹框出现td.show(); }}在 MainAbilitySlice 中修改 onClick 方法中去调用工具类方法package com.xdr630.toastapplication.slice;import com.xdr630.toastapplication.MyToastUtils.ToastUtils;import com.xdr630.toastapplication.ResourceTable;import ohos.aafwk.ability.AbilitySlice;import ohos.aafwk.content.Intent;import ohos.agp.components.Button;import ohos.agp.components.Component;import ohos.agp.utils.LayoutAlignment;import ohos.agp.window.dialog.ToastDialog;public class MainAbilitySlice extends AbilitySlice implements Component.ClickedListener { @Override public void onStart(Intent intent) {super.onStart(intent);super.setUIContent(ResourceTable.Layout_ability_main);//找到界面中的按钮Button but = (Button) findComponentById(ResourceTable.Id_but);//添加点击事件but.setClickedListener(this); } @Override public void onActive() {super.onActive(); } @Override public void onForeground(Intent intent) {super.onForeground(intent); } @Override public void onClick(Component component) {ToastUtils.showDialog(this,"吐司弹框抽取工具类"); }}运行: 点击 这个弹框就跟我们平时玩的APP中的弹框有些类似,唯一区别就是有点大,在 mytoast.xml 去调节弹框的大小,ToastUtils.java 调节弹框的位置还可以给弹框添加一个偏移量,如Y轴添加200px运行,点击后,发现弹框往上偏移了
2021-09-03 10:05
输入的文本框组件。3. 布局类组件 布局其实也是一种比较特殊的组件。【本文正在参与“有奖征文 | HarmonyOS征文大赛”活动】https://bbs.elecfans.com/jishu_2098584_1_1.html
2021-08-12 12:23
广告功能基本上算是每个软件的必备功能之一,常见的除了轮播图,列表之外,就是上下滚动的形式。广告内容不仅支持上下滚动,还需要支持手势操作,以及关闭当前正在预览的广告内容。在 Android 或 iOS 上要想实现这样的功能并不容易,那么在鸿蒙上怎么实现这样的功能呢?本篇文章教你使用最简单的方式实现一个支持上下滚动的广告控件,建议点赞收藏!
2025-06-24 17:05
日常开发过程中,遇到这种 Scroll 嵌套 List 列表滑动顶部悬停的场景十分常见,在鸿蒙开发时也正好实现了这个功能,本篇文章将带你一步步实现 Tab 顶部悬停的效果,建议点赞收藏!
2025-06-24 17:07