diff --git "a/HarmonyOS \345\272\224\347\224\250\345\274\200\345\217\221-\345\237\272\346\234\254\346\216\247\344\273\266.md" "b/HarmonyOS \345\272\224\347\224\250\345\274\200\345\217\221-\345\237\272\346\234\254\346\216\247\344\273\266.md" new file mode 100644 index 0000000000000000000000000000000000000000..813273f808b5e184fa839a1ed25aadec6265141a --- /dev/null +++ "b/HarmonyOS \345\272\224\347\224\250\345\274\200\345\217\221-\345\237\272\346\234\254\346\216\247\344\273\266.md" @@ -0,0 +1,256 @@ +# HarmonyOS 应用开发-基本控件 +# 1、介绍 +您将建立什么 + +在这个 Codelab 中,你将创建 Demo Project,并将 Demo 编译成 Hap,此示例应用程序展示了如何使用轻量级偏好数据库。 +您将会学到什么 + + 如何创建一个 HarmonyOS Demo Project + 如何构建一个 Hap 并且将其部署到智慧屏真机 + 通过此示例应用体验如何使用轻量级偏好数据库 + + +# 2. 您需要什么 + +硬件要求 + + 操作系统:Windows10 64 位 + 内存:8G 及以上。 + 硬盘:100G 及以上。 + 分辨率:1280*800 及以上 + +软件要求 + + DevEco Studio:需手动下载安装,详细步骤请参考《DevEco Studio 使用指南》2.1.2 + JDK:DevEco Studio 自动安装。 + Node.js:请手动下载安装,详细步骤请参考《DevEco Studio 使用指南》2.1.3 下载和安装 Node.js。 + HarmonyOS SDK:待 DevEco Studio 安装完成后,利用 DevEco Studio 来加载 HarmonyOS SDK。详细步骤请参考《DevEco Studio 使用指南》2.1.6 加载 HarmonyOS SDK。 + Maven 库依赖包:如需手动拷贝和配置,详细步骤请参考《DevEco Studio 使用指南》2.3 离线方式配置 Maven 库。 + +需要的知识点 + + Java 基础开发能力。 + + +# 3. 能力接入准备 +实现 HarmonyOS 应用开发,需要完成以下准备工作: + + 环境准备。 + 环境搭建。 + 创建项目 + 申请调试证书 + 应用开发 + +具体操作,请按照《DevEco Studio 使用指南》中详细说明来完成。 + +# 4. 代码片段 +**1. 布局:** + + 布局代码: +```c +LayoutConfig config = new LayoutConfig(LayoutConfig.MATCH_PARENT, LayoutConfig.MATCH_PARENT); +myLayout.setLayoutConfig(config); +myLayout.setOrientation(Component.VERTICAL); +ShapeElement element = new ShapeElement(); +element.setRgbColor(new RgbColor(255, 255, 255)); +myLayout.setBackground(element); +log = createText("日志信息"); +myLayout.addComponent(log); +writeBtn = createBtn("写入 preferences 数据", new RgbColor(0, 0, 255), 1002); +readBtn = createBtn("读取 preferences 数据", new RgbColor(0, 0, 255), 1003); +addObserver = createBtn("注册观察者", new RgbColor(255, 0, 0), 1004); +``` + +```c +private Text createText(String title) { +Text text = new Text(this); +DirectionalLayout.LayoutConfig config = new DirectionalLayout.LayoutConfig(DirectionalLayout.LayoutConfig.MATCH_CONTENT, DirectionalLayout.LayoutConfig.MATCH_CONTENT); +text.setLayoutConfig(config); +text.setText(title); +text.setTextSize(48); +text.setTextColor(new Color(0xFF0000FF)); +return text; +} +``` + +```c +private Button createBtn(String title, RgbColor color, int id) { +Button btn = new Button(this); +LayoutConfig configBtn = new LayoutConfig(500, 100); +configBtn.topMargin = 30; +btn.setLayoutConfig(configBtn); +btn.setText(title); +btn.setId(id); +btn.setTextSize(48); +btn.setTextColor(new Color(0xFFFFFFFF)); +ShapeElement elementBtn = new ShapeElement(); +elementBtn.setRgbColor(color); +elementBtn.setCornerRadius(12); +btn.setBackground(elementBtn); +myLayout.addComponent(btn); +return btn; +} +``` + +**2. Preferences 使用:** + + Preferences 初始化 +```c +private void initPreferences() { +DatabaseHelper databaseHelper = new DatabaseHelper(this); +String fileName = "user_info"; +preferences = databaseHelper.getPreferences(fileName); +} +``` +写文件: +```c +preferences.putInt("age", Integer.parseInt(age.getText())); +preferences.putString("name", name.getText()); +preferences.flushSync(); +``` +读文件: +```c +int age = preferences.getInt("age", 0); +String name = preferences.getString("name", ""); +ToastDialog toastDialog = new ToastDialog(PreferencesAbilitySlice.this); +toastDialog.setText("read user data frome preferences name:" + name + ", age:" + age); +toastDialog.show(); +``` + +观察者: + +注册: +```c +counter = new PreferencesChangeCounter(); +preferences.registerObserver(counter); +``` + +```c +private class PreferencesChangeCounter implements Preferences.PreferencesObserver { + @Override + public void onChange(Preferences preferences, String key) { + if ("name".equals(key)) { + String name = preferences.getString("name", ""); + log.setText("user data name is edit:" + name); + } + if ("age".equals(key)) { + int age = preferences.getInt("age", 0); + log.setText("user data age is edit:" + age); + } + } +} +``` + +删除: +```c +preferences.unregisterObserver(counter); +``` + +**3. 响应遥控器点击** +在 zh-CN.json 文件中写入: +```c +private void addFocusChangedListener(Component view) { + view.setFocusChangedListener(new Component.FocusChangedListener() { + @Override + public void onFocusChange(Component component, boolean b) { + ShapeElement shapeElement = (ShapeElement) view.getBackgroundElement(); + if (b) { + shapeElement.setStroke(10, new RgbColor(0, 0, 0)); + focusView = view; + } else { + shapeElement.setStroke(0, new RgbColor(0, 0, 0)); + } + } + }); +} + +@Override +public boolean onKeyUp(int keyCode, KeyEvent keyEvent) { + switch (keyCode) { + case KeyEvent.KEY_DPAD_CENTER: + case KeyEvent.KEY_ENTER: + if(focusView == writeBtn) { + + preferences.putInt("age", index++); + preferences.putString("name", "张三"); + preferences.flushSync(); + } + if(focusView == readBtn) { + int age = preferences.getInt("age", 0); + String name = preferences.getString("name", ""); + log.setText("read user data frome preferences name:" + name + ", age:" + age); + } + if(focusView == addObserver) { + if (addObserver.getText().equals("注册观察者")) { + addObserver.setText("删除观察者"); + // 向 preferences 实例注册观察者 + counter = new PreferencesChangeCounter(); + preferences.registerObserver(counter); + + } else { + addObserver.setText("注册观察者"); + // 向 preferences 实例注销观察者 + preferences.unregisterObserver(counter); + } + } + return true; + case KeyEvent.KEY_DPAD_UP: + int position = views.indexOf(focusView.getId()); + if (position > 0) { + switch (position) { + case 1: + writeBtn.requestFocus(); + break; + case 2: + readBtn.requestFocus(); + break; + default: + break; + } + } + return true; + case KeyEvent.KEY_DPAD_DOWN: + position = views.indexOf(focusView.getId()); + if (position < 3) { + switch (position) { + case 0: + readBtn.requestFocus(); + break; + case 1: + addObserver.requestFocus(); + break; + default: + break; + } + } + return true; + } + return false; +} +``` +**4.编译运行该应用** + + 通过 hdc 连接大屏设备 + + 先查看智慧屏 IP: + + + 大屏设置->"网络与连接"->"网络"->"有线网络" + + + 在 cmd 或者 IDE 的 Terminal 输入命令: + + hdc tconn 192.168.3.9:5555 + + + 运行 hap +![](https://img-blog.csdnimg.cn/20200907170810705.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80ODMwNDU3Mw==,size_16,color_FFFFFF,t_70#pic_center) +提示:需要通过注册成开发者才能完成集成准备中的操作。 +# 干得好 + - 你已经成功完成了 HarmonyOS 应用开发 E2E 体验,学到了: + - 如何创建一个 HarmonyOS Demo Project + - 如何构建一个 Hap 并且将其部署到真机上 + - 在 HarmonyOS 上如何使用 HarmonyOS 的轻量级偏好数据库 + + +[【如果您想学习 HarmonyOS 应用开发基础教程 请猛戳】](https://codechina.csdn.net/huawei/harmonyos/HarmonyOS-Guide) \ No newline at end of file