Codelabs 之 时钟FA卡片开发样例 实践荐

## 搭建环境
安装DevEco Studio,详情请参考[DevEco Studio下载](https://developer.harmonyos.com/cn/develop/deveco-studio)。
设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能实践的拼音确保时钟表图片工具的正常使用,可以根据如下两时钟种情况来配置开发环codeforces境:
如果可以直接访问I实践nternet,只需进行[下载HarmonyOS SDK](从网络神豪开始https://developer.harmonyo开发区s.com/cn/开发docs/documentation/doc-guides/environment_config-0000001052902427)操作。
如果网络不能直接访问Internet,需要通过代理服务器才可以访问,请参考[配置开发环境](https://developer.harmonyos.com/cn/docs/d实践活动ocumentation/doc-guides/enviro时钟表图片nment_config-0000001052902427)。
## 代码结构解读
```html
├─config.json #项目配置文件
├─java
│ └─com
│ └─huawei
│ └─learnharmony
│ │ MainAbility.java
│ │ MyAppcodeforceslication.java
│ │ TimerAbicodeforceslity.java #用于定时更新卡片的服务
│ │
│ ├─database
│ │ Form.开发游戏java #卡片表,extends OrmObject
│ │ FormDatabase.java #卡片数据库,extends OrmDatabase
│ │
│ ├─slice
│ │ ClockCardSlice.java #时钟卡片主能力页,exte时钟简笔画nds AbilitySlice
│ │
│ └─utils
│ ComponentProvidecode_f8xsxrUtils.java #Componen开发游戏tProvider工具类
│ DatabaseUtils.java #数据库工具类,实现Formcode的添加和删除
│ DateUtils.java #日期工具类
│ LogUtils.java #日志实践心得工具类

└─resources
└─base
├─element
│ string时钟英语.json

├─graphic
│ background_ability_main.xml
│ background_week.xml

├─layout
│ ability_macodeblocksin.xml #主能力页,默认
│ form_image_with_info_da时钟简笔画te_card_1_2.xml #1x2规格的卡片
│ form_image_with_info_date_card_2_2.xml #2x2规格的卡片
│ form_image_with_info_date_card_2_4.xml #2x4规格的卡片

└─media
form_image_with_info_datecard_default_image_2.png
form_image_with_info_fo从火影开始做幕后黑手rm_card_default_image_2.png
icon.png
```
## 卡片布局
### form_icode_f8xsxmage_with_info_date_card_1_2时钟下载.xml #1x2规格的code_wvwvj卡片
```xml

```
### form_image_with_info_date_card_2_2.xml #2实践活动心得体会x2规格的卡片
```xml

```
### form_image_with_info_date_card从亮剑开始崛起_2_4.xml #2x4规格的卡片code_f8xsx
```xml

```
## 知识点讲解
### 1.对象关系映射型数据库的使用,如何查询、创建卡片、删除卡片
**首先使用注解定义一张Form表,继承自 OrmObject**
![image.png](hcodeblockstt实践心得ps://harmonyos.oss-cn-beijing.aliyuncs.com/images/202106/b66a23c01d3d0ab44bf时钟的拼音16257761fa40d4181ae.pcode_wvwvjng?x时钟简笔画-oss-pro实践是检验真理的唯一标准cess=image/resize,w_86时钟7,h_539)
**定义对象关系型数据库FormDatabase,继承自OrmDatabase**
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/images/202106/a45b96c4138675746f7725ad5时钟下载f32b490a64bf5.png?x-oss-process=image/resize,实践的拼音w_609,h_248)co
**使用DatabaseHelper类获取数据库连接(上下文)OrmContext**
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/icomages/202106/b4c6353212e1795时钟机关之星樱花动漫a0e28086ea35d56068353a0.png?x-oss-process=image/resiz开发e,w_926,h_675)
**操作数据库,使用OrmPredicates组装条件查询卡片,创建Form卡片、删除Form卡片**
![image.png](http从封神开始的诸天之旅s://harmon开发区搬家电话yos.oss-cn-beijing.aliyuncs.com/images/202106/874ffe333c29835bcf25403e8a2bdcc593bb9f.png?x-oss时钟的拼音-pro实践是什么意思cess=image/resize,w_723,h_681)
**在MainAbility中,创建卡片和删除卡片的回调函数中onCreateForm/onDeleteFcode_3v19lorcode_chwkzm 构建Form操作卡片
要用到ProviderFormInfo/ComponentPr实践报告ovider。**
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/images/202106/11时钟fb01c4466066ff1a870314acode_chwkz2e7afd8c2c72b.png?x-oss-process=image/resize,w_1049,h_912)
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/images/202106/127f3e17458e18285632从红月开始25def38430b7897075.png?x-oss-process=image/r实践的拼音esize,w_715,h_251)
### 2.如何更新卡片数据
定时器-----查询卡片,遍历(可能有多个)----使用ComponentProvider封装数据-----调用up时钟表的认识dateForm方法执行更新。
![image.png](https://harmonyos.oss-cn-beijing.aliyuncs.com/images开发区搬家电话/202106/85d4fce470c4a753291660a9f01960e6a3d2ce.png?x-oss-process=image/resize,w_1042,h_914)
## 归纳总结
### Q1.服务卡片的规格,也就是2从木叶开始逃亡*2/2*4 是由layout布局文件决定的吗,有啥区别?
规格主要由config.json 的配置决定,有三处***landscapeLayo时钟uts、supportDimensions、portraitLayouts***,新增规格也要增加对应规格的布局文件,但是规格并不是由布局文件本时钟身决定的。
***说明:三处规格的顺序要一致,否则预览时显示也是有问题的。**
confi从木叶开始逃亡g.json
```json
{
"lan实践的拼音dscapeLaycode_wvwvjouts": [
"$layout:form_image_with_info_date_card_1_2",
"$layout:form_image_with_info_date_card_2_2",
"$layout:form_image_with_info_date_card_2_4"
],
"isDefault": true,
"schedulecode_f8xsxdUpdateTime": "10:30",
"defaultDimension":时钟下载 "2*4",
"name": "DateCard",
"description": "Thiscode_3v19l is a form时钟 card",
"colorMode": "light",
"type": "Java",
"s实践活动心得体会upportDimens开发者模式ions":从离婚开始的文娱 [
"1*2",
"2*2",
"2*4"
],
"portr时钟机关之星樱花动漫aitLayouts": [
"$layout:form_image_with_info_date_card_1_2",
"$layout:form_image_with_info_date_card_2_2",
"$layout:form_image_with_info_date_card_2_4"
],
"updateEnabled": true,
"updateDuration": 1,
"formVisibleNotif开发y": true
}
]
```
布局文件的命名也不影响规格,但是建议命名统一采用 xxxxx_card_1实践论_2.xml/xxxxx_card_2_2.xml ,支持的规格是个枚举值,参照进co行定义就好。
```json
"defaultDimension": {
"descripti实践活动心得体会on": "This label identifies the default appearance specifications of the card.",
"type": "string",
"enum": [
"1*2",
"2*2",
"2*4",
"4*4"
]
```
### Q2.为什么要更新卡片到DB ?
1.卡片信息需要保存在数据库中,使时钟屏保用OrmContext的delete/insert来操作db中的卡片
2.卡片的数据不需要更新到db,只co是更新到显示,使用updateForm方法更新卡片数据的显示
### Q3.如何新增一个规格的卡片?
下面以增加一个1*2规格的实践的拼音卡片为例:
1.config.json ,有三处 ***landscapeLayout开发商s、supportDimensions、portraitLayouts*** 要增加
```j时钟机关之星樱花动漫son
"forms": [
{
"landscapeLayouts": [
"$layout:form_image_with_info_date_card_1_2",
"$layout:form_image_with_info_date_card_2_2",
"$layout:form_image_with_info_date_card_2_4"
],
"isDefault": true,
"scheduledUpdateTime": "10:30",
"defaultDimension": "2*4",
"ncode_ja9j0ame": "DateCard",
"description": "This is a form card",
"colorMode": "dark",
"type": "Java",
"s实践upportDimensions": [
"1*2",
"2*2",
"2*4"
],
"portraitLayouts": [
"$layout:form_image_with_info_date_card_1_2",
"$layout:form_image_with_info_date_card_2_2",
"$layout:form_image_with_info_date_card_2_4"
],
"updateEnabled": true,
"updateDuration": 1,
"formVisibleNotify": true
}
]
```
2.layout
layout下新增for开发者模式m_im时钟age_with_info_date_card_1从姑获鸟开始_2.xml 布局文件
```xml

```
3.ComponentProviderUtils.java
更新几处与规格相关的代码
```java
/**
* 获取对应规格code_f8xsx的布局文件
* @param dimensi从红月开始on
* @return
*/
publ从火影开始做幕后黑手ic static int getLayoutId(int dimension){
int layou从火影开始做幕后黑手tId = 0;
if (dimension == DEFAULT_DIMENSION_1X2) {
HiLog.info(开发商最怕的投诉电话LABEL,"获取1*2的布局文件时钟机关之星樱花动漫");
layoutId = ResourceTable.Layout_form_image_with_info_date_card_1时钟简笔画_2;
}
if (dimension == D开发游戏EFAULT_DIMENSION_2X2) {
HiLog.info(LABEL,"实践是检验真理的唯一标准获取1*2的布局文codeforces件");
layoutId = ResourceTable.Layout_form_image_with_info_date_card_2_2;
}
if (dicode_ja9j0mension == DEFAULT_DIMENSION_2X4) {
HiLog.info(LABEL,"获取2*4的布局文件");
layoutId = Resou时钟的拼音rceTable.Layout_form_image_with_从亮剑开始崛起info时钟机关之星_date_card_2_4;
}
return layoutId;
}
/**
* Set the value of componentProvider
* 根据规格来更新卡片信息
* @param componentProvider component provider
*/
private static开发者模式 void setComponentProviderValue(ComponentProvider componentProvid时钟的拼音er,int layoutId) {
Calendar now = Calendar.开发者模式getInstance();
int hour = now.get(Cacodeforceslendar.HOUR_OF_DAY);
int min = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
String hourString =实践心得 int2String实践(hour);实践活动心得体会
String minString = int2String(min);
String secondString = int2String(s实践活动心得体会econ实践是检验真理的唯一标准d);
switch (layoutId){
//1*2布局只有个日期组件
case ResourceTable.Layout_form_image_with_info_date_card_1_2:
comp开发商最怕的投诉电话onentProvider.setText(ResourceTable.Id_date, DateUtils.getCurrentDate("yyyy-MM-dd"));
componentProvider.setT从红月开始extColor(ResourceTable.Id_date,nowWeekColor);
default:
componentProvider.setText(ResourceTable.I实践心得d_date, DateUtils.getCurrentDate("yyyy-MM-dd实践是检验真理的唯一标准"));
componentProvider.setText(ResourceTable.Id_hour, ho实践出真知的名言警句urString);
componentProvider.setText(Res实践活动心得体会ourceTabl时钟简笔画e.Id_min, minString);
componentProvider.setText(ResourceTable.Id_sec, secondString);
// 获取当前星期
int weekDayId = getWeekDayId();
compon从封神开始的诸天之旅entProvider.setTexcode_wvwvjtColor(weekDayId, nowWeekCol实践是检验真理的唯一标准or);
// 将前一天的星期改回原色
int lastW从木叶开始逃亡eekId = getLastWeekDayId();
componentProvider.setTextColor(lastWeekId, primarycodeforcesWeekColor);
}实践是检验真理的唯一标准
}
```
### Q4.ClockCardSlice.jcodeforcesava和TimerAbility.java 区别?
1.ClockCardSlice从封神开始的诸天之旅.java 代表的是主能力页,是一个FAcode_ja9j0,负责主能力页的组件的初始化以及数据的定时更新,使用了form_image_with_info_date_card_2_4.xml 的布局。
2.TimerAbilit从红月开始y.java 是一个PA,是一个co后台服务,负责不同规格卡片上组件的codes初始化以及数据的定时更新,点击卡片会打开主能力页。
样例中二者都是实现了组件的初始化和数据定时更实践是什么意思新,但相互独立。
##实践是什么意思 效果展示
|2x4规格|2x2规格|1x2规格|
|-|实践是什么意思-|-|
|![动画1.gif](https://harmonyos.oss-ccode_f8xsxn-beijing.aliyuncs.com/images/202106/从封神开始的诸天之旅3108fcf97e2a0f87b0c8574b4c88ae8a7fd905.gif?x-oss-process=image/resize,w_331,h_657)|![动画2.gif](https://harmon实践是检验真理的唯一标准yos.oss-cn-beijing.aliyuncs.com/images/实践202106/c96184264904c9952b748787399c66db13b时钟下载06a.gif?x时钟表的认识-oss-process=image/resize,w_331,h_657)|![动画3.gif](https://harmonyos.oss-cn-beijing.aliyuncs.com/images/202106/b40dfc开发游戏8623a8afaa27f817f2913b52从红月开始bf45eab3.gif?x-oss-process=image/resize,w_331,实践报告h_657)|
文章相关附件可以点击下面的原文链接前往下载
原文链接:https://harmonyos.51cto.com/posts/5904#bkwz
[想了解更多关于鸿蒙的内容,请访问:](htt时钟表的认识ps://harmonyos.51cto.com时钟下载/#bkwz)
[51CTO和华为官方战略合作共建的鸿蒙技术社区](https:时钟//harmonyos.51cto.com/#b时钟表图片kwz)
https://harmonyos.codes51cto.com/#bkwz