#星计划#鸿蒙应用开发实战:实现时钟app 原创

鱼弦CTO
发布于 2023-12-21 11:04
浏览
0收藏

#星计划#鸿蒙应用开发实战:实现时钟app-鸿蒙开发者社区

原理详细解释

  • 应用界面使用XML布局文件(​​clock.xml​​)定义,其中包含一个显示时间的文本组件和两个按钮组件。
  • 主要代码文件(​​ClockAbility.java​​​)继承自​​Ability​​类,作为应用的入口点。
  • 在​​onStart​​​方法中,通过​​findComponentById​​方法获取界面上的文本组件和按钮组件,并为按钮组件设置点击监听器。
  • 当用户点击"Start"按钮时,调用​​startClock​​​方法开始计时,将​​isRunning​​​标志设置为​​true​​​,记录开始时间,并调用​​updateClockRunnable​​​的​​run​​方法更新时钟显示。
  • ​updateClockRunnable​​​是一个​​Runnable​​​对象,它通过计算当前时间与开始时间的差值,来计算经过的时间,并将时间格式化为"HH:MM:SS"的形式,然后更新显示在文本组件上。如果计时正在运行,会使用​​postDelayed​​​方法延迟1秒后再次调用​​run​​方法更新时钟。
  • 当用户点击"Stop"按钮时,调用​​stopClock​​​方法停止计时,将​​isRunning​​​标志设置为​​false​​。

底层架构流程图

+------------------------+
|                        |
|      onStart(Intent)    |
|          |             |
|     +---------+        |
|     |         |        |
|     |  XML    |        |
|     | Layout  |        |
|     |         |        |
|     +----+----+        |
|          |             |
|  +-------v--------+    |
|  |                |    |
|  |   Find Views   |    |
|  |                |    |
|  +-------+--------+    |
|          |             |
|  +-------v--------+    |
|  |                |    |
|  |  Set Listeners |    |
|  |                |    |
|  +-------+--------+    |
|          |             |
|  +-------v--------+    |
|  |                |    |
|  |   Start Clock  |    |
|  |                |    |
|  +-----+----------+    |
|        |               |
|  +-----v----------+    |
|  |                |    |
|  | Update Clock   |    |
|  |                |    |
|  +-----+----------+    |
|        |               |
|  +-----v----------+    |
|  |                |    |
|  |   Stop Clock   |    |
|  |                |    |
|  +----------------+    |
|                        |
+------------------------+

使用场景解释
时钟应用是一个常见的实用工具,适用于各种场景,包括但不限于以下情况:

  • 个人使用:用户可以在手机或其他设备上使用时钟应用来查看当前时间。
  • 会议或活动:在会议室、办公室或其他公共场所中,时钟应用可以作为一个简单的计时工具,帮助参与者控制时间。
  • 倒计时活动:时钟应用可以用于倒计时活动,如运动比赛、烹饪计时等。

以下是一个简单的鸿蒙应用开发实战示例,实现了一个时钟应用:

clock.xml(布局文件):

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical">

    <Text
        ohos:id="$+id/clockText"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="00:00:00"
        ohos:text_size="60fp"
        ohos:text_alignment="center" />

    <Button
        ohos:id="$+id/startButton"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Start"
        ohos:layout_alignment="center"
        ohos:margin_top="30fp" />

    <Button
        ohos:id="$+id/stopButton"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:text="Stop"
        ohos:layout_alignment="center"
        ohos:margin_top="10fp" />

</DirectionalLayout>

ClockAbility.java(主要代码):

import ohos.aafwk.ability.Ability;
import ohos.aafwk.content.Intent;
import ohos.agp.components.Button;
import ohos.agp.components.Text;

public class ClockAbility extends Ability {
    private Text clockText;
    private Button startButton;
    private Button stopButton;

    private boolean isRunning = false;
    private long startTime = 0;

    private Runnable updateClockRunnable = new Runnable() {
        @Override
        public void run() {
            long currentTime = System.currentTimeMillis();
            long elapsedTime = currentTime - startTime;
            int seconds = (int) (elapsedTime / 1000) % 60;
            int minutes = (int) ((elapsedTime / (1000 * 60)) % 60);
            int hours = (int) ((elapsedTime / (1000 * 60 * 60)) % 24);

            String timeText = String.format("%02d:%02d:%02d", hours, minutes, seconds);
            clockText.setText(timeText);

            if (isRunning) {
                clockText.postDelayed(this, 1000);
            }
        }
    };

    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_clock);

        clockText = (Text) findComponentById(ResourceTable.Id_clockText);
        startButton = (Button) findComponentById(ResourceTable.Id_startButton);
        stopButton = (Button) findComponentById(ResourceTable.Id_stopButton);

        startButton.setClickedListener(component -> startClock());
        stopButton.setClickedListener(component -> stopClock());
    }

    private void startClock() {
        if (!isRunning) {
            isRunning = true;
            startTime = System.currentTimeMillis();
            updateClockRunnable.run();
        }
    }

    private void stopClock() {
        isRunning = false;
    }
}

以上代码是一个简单的鸿蒙时钟应用的示例。它包含一个布局文件 ​​clock.xml​​​ 和一个主要代码文件 ​​ClockAbility.java​​。其中,布局文件定义了应用的界面布局,主要代码文件实现了时钟的计时功能。

请注意,该示例仅实现了基本的时钟功能,仅供参考和学习。对于一个完整的应用,可能需要添加更多的功能,例如设置闹铃、倒计时等。此外,还可以进行界面美化和交互优化,以满足具体需求。

如果想要运行这个应用,请使用鸿蒙开发环境进行编译和部署。

文献材料链接
鸿蒙应用开发相关文档和资料可以在华为开发者网站上找到。以下是一些鸿蒙应用开发的官方文档链接:

当前都有哪些产品在使用
目前,鸿蒙操作系统已经在一些华为公司的产品中得到了应用。以下是一些使用鸿蒙操作系统的产品示例:

  1. 华为智能手机:华为公司的最新一代智能手机,如华为 Mate 40 系列、华为 P40 系列等,已经采用了鸿蒙操作系统。
  2. 华为智能手表:华为推出了一系列基于鸿蒙操作系统的智能手表,如华为 Watch 3 系列。
  3. 华为智能电视:华为在智能电视领域也采用了鸿蒙操作系统,推出了一系列支持鸿蒙的智能电视产品。
  4. 华为笔记本电脑:华为 MateBook 系列笔记本电脑中的一些型号也开始使用鸿蒙操作系统。









©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2023-12-21 11:07:46修改
1
收藏
回复
举报
回复
    相关推荐