当前位置:   article > 正文

HarmonyOS实战—服务卡初体验之天气服务卡片_harmony0s service widget

harmony0s service widget

博客中所有涉及到的代码都可在Gitee获得,点击到达

服务卡片(以下简称“卡片”),在桌面点击图标向上推动会弹出一个小卡片。弹出卡片后也可将卡片固定在屏幕中作为一个小组件显示。卡片中可以显示自定义的UI,也可以点击产生互动。

先看下完成后的效果。 

目录

 

卡片服务基本概念

创建模板

布局文件代码

配置文件


卡片服务基本概念

  • 卡片使用方

        显示卡片内容的宿主应用,控制卡片在宿主中展示的位置。

  • 卡片管理服务

        用于管理系统中所添加卡片的常驻代理服务,包括卡片对象的管理与使用,以及卡片周期性刷新等。

  • 卡片提供方

        提供卡片显示内容的HarmonyOS应用或原子化服务,控制卡片的显示内容、控件布局以及控件点击事件。

运作机制如下:

创建模板

我们可以用DevEco Studio自带的模板。

在工程列表中右键 -> 新建 -> Service Widget

 以基础配置的immersive Pattern 为例,点击下一步。

 设置这个服务小装置设置名称、描述,创建新的实体,类型为Java,支持2*2和5*4两种大小。

点击完成后会自动为我们生成相关配置、类文件与布局文件。

 

假若我们需要写的时天气的服务卡,我们就需要修改两个配置文件。

  • form_immersive_pattern_widget_weather_2_2.xml
  • form_immersive_pattern_widget_weather_2_4.xml

布局文件代码

form_immersive_pattern_widget_weather_2_2.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DependentLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:height="match_parent"
  5. ohos:width="match_parent"
  6. ohos:background_element="#0086D4"
  7. ohos:remote="true">
  8. <Image
  9. ohos:height="240"
  10. ohos:width="240"
  11. ohos:align_parent_end="true"
  12. ohos:image_src="$media:100"
  13. ohos:scale_mode="zoom_center"/>
  14. <Text
  15. ohos:id="$+id:title"
  16. ohos:text="北京"
  17. ohos:text_size="39px"
  18. ohos:text_color="#b0c4de"
  19. ohos:top_margin="42px"
  20. ohos:left_margin="20px"
  21. ohos:width="match_content"
  22. ohos:height="match_content"/>
  23. <Text
  24. ohos:id="$+id:temperature"
  25. ohos:text="35°"
  26. ohos:text_size="100px"
  27. ohos:text_color="#FFFFFF"
  28. ohos:top_margin="70px"
  29. ohos:left_margin="20px"
  30. ohos:below="$id:title"
  31. ohos:width="match_content"
  32. ohos:height="match_content"/>
  33. <Text
  34. ohos:id="$+id:textView4"
  35. ohos:text="28° ~ 35°"
  36. ohos:text_size="39px"
  37. ohos:text_color="#b0c4de"
  38. ohos:top_margin="10px"
  39. ohos:left_margin="20px"
  40. ohos:below="$id:temperature"
  41. ohos:width="match_content"
  42. ohos:height="match_content"/>
  43. <Text
  44. ohos:id="$+id:textView5"
  45. ohos:text="晴"
  46. ohos:text_size="39px"
  47. ohos:text_color="#b0c4de"
  48. ohos:top_margin="10px"
  49. ohos:left_margin="20px"
  50. ohos:below="$id:textView4"
  51. ohos:width="match_content"
  52. ohos:height="match_content"/>
  53. </DependentLayout>

form_immersive_pattern_widget_weather_2_4.xml

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <DependentLayout
  3. xmlns:ohos="http://schemas.huawei.com/res/ohos"
  4. ohos:background_element="#0086D4"
  5. ohos:height="match_parent"
  6. ohos:remote="true"
  7. ohos:width="match_parent">
  8. <Image
  9. ohos:align_parent_end="true"
  10. ohos:height="240"
  11. ohos:image_src="$media:100"
  12. ohos:scale_mode="zoom_center"
  13. ohos:width="240"/>
  14. <Text
  15. ohos:height="match_content"
  16. ohos:id="$+id:title"
  17. ohos:left_margin="20px"
  18. ohos:text="北京"
  19. ohos:text_color="#b0c4de"
  20. ohos:text_size="39px"
  21. ohos:top_margin="42px"
  22. ohos:width="match_content"/>
  23. <Text
  24. ohos:below="$id:title"
  25. ohos:height="match_content"
  26. ohos:id="$+id:temperature"
  27. ohos:left_margin="20px"
  28. ohos:text="35°"
  29. ohos:text_color="#FFFFFF"
  30. ohos:text_size="100px"
  31. ohos:top_margin="70px"
  32. ohos:width="match_content"/>
  33. <Text
  34. ohos:below="$id:temperature"
  35. ohos:height="match_content"
  36. ohos:id="$+id:textView4"
  37. ohos:left_margin="20px"
  38. ohos:text="28° ~ 35°"
  39. ohos:text_color="#b0c4de"
  40. ohos:text_size="39px"
  41. ohos:top_margin="10px"
  42. ohos:width="match_content"/>
  43. <Text
  44. ohos:below="$id:textView4"
  45. ohos:height="match_content"
  46. ohos:id="$+id:textView5"
  47. ohos:left_margin="20px"
  48. ohos:text="多云"
  49. ohos:text_color="#b0c4de"
  50. ohos:text_size="39px"
  51. ohos:top_margin="10px"
  52. ohos:width="match_content"/>
  53. <Text
  54. ohos:height="match_content"
  55. ohos:id="$+id:textView6"
  56. ohos:left_margin="300px"
  57. ohos:right_of="$id:title"
  58. ohos:text="宜洗车"
  59. ohos:text_color="#b0c4de"
  60. ohos:text_size="39px"
  61. ohos:top_margin="80px"
  62. ohos:width="match_content"/>
  63. <Text
  64. ohos:align_left="$id:textView6"
  65. ohos:below="$id:textView6"
  66. ohos:height="match_content"
  67. ohos:id="$+id:textView7"
  68. ohos:text="紫外线强度:80"
  69. ohos:text_color="#b0c4de"
  70. ohos:text_size="39px"
  71. ohos:top_margin="20px"
  72. ohos:width="match_content"/>
  73. <Text
  74. ohos:align_left="$id:textView6"
  75. ohos:below="$id:textView7"
  76. ohos:height="match_content"
  77. ohos:text="今日运势:你需要应付低迷的运势,意味着要步步为营,千万不能受利益的诱惑。你或许只是充当别人的“绿叶”"
  78. ohos:text_color="#b0c4de"
  79. ohos:text_size="39px"
  80. ohos:top_margin="20px"
  81. ohos:multiple_lines="true"
  82. ohos:max_text_lines="4"
  83. ohos:truncation_mode="ellipsis_at_end"
  84. ohos:width="500"/>
  85. </DependentLayout>

配置文件

服务卡的配置文件如下:

  1. {
  2. "name": "com.example.helloharmony.widget.WeatherFomrAbility",
  3. "icon": "$media:icon",
  4. "description": "$string:widget_weatherfomrability_description",
  5. "formsEnabled": true,
  6. "label": "$string:entry_WeatherFomrAbility",
  7. "type": "page",
  8. "forms": [
  9. {
  10. "landscapeLayouts": [
  11. "$layout:form_immersive_pattern_widget_weather_2_2",
  12. "$layout:form_immersive_pattern_widget_weather_2_4"
  13. ],
  14. "isDefault": true,
  15. "scheduledUpdateTime": "10:30",
  16. "defaultDimension": "2*2",
  17. "name": "widget_weather",
  18. "description": "This is a weather service widget",
  19. "colorMode": "auto",
  20. "type": "Java",
  21. "supportDimensions": [
  22. "2*2",
  23. "2*4"
  24. ],
  25. "portraitLayouts": [
  26. "$layout:form_immersive_pattern_widget_weather_2_2",
  27. "$layout:form_immersive_pattern_widget_weather_2_4"
  28. ],
  29. "updateEnabled": true,
  30. "updateDuration": 1
  31. }
  32. ],
  33. "launchType": "singleton"
  34. }

属性解读

可能比较陌生的是forms中的配置,如果需要了解外部配置请看之前的文章。

属性名称子属性含义
name-表示卡片的类名。
description-表示卡片的描述。取值可以是描述性内容,也可以是对描述性内容的资源索引,以支持多语言。
isDefault-

表示该卡片是否为默认卡片,每个Ability有且只有一个默认卡片。

  • true:默认卡片。
  • false:非默认卡片。
type-

表示卡片的类型。取值范围如下:

  • Java:Java卡片。
  • JS:JS卡片。
colorMode-

表示卡片的主题样式,取值范围如下:

  • auto:自适应。
  • dark:深色主题。
  • light:浅色主题。
supportDimensions-

表示卡片支持的外观规格,取值范围:

  • 1*2:表示1行2列的二宫格。
  • 2*2:表示2行2列的四宫格。
  • 2*4:表示2行4列的八宫格。
  • 4*4:表示4行4列的十六宫格。
defaultDimension-表示卡片的默认外观规格,取值必须在该卡片supportDimensions配置的列表中。
landscapeLayouts-表示卡片外观规格对应的横向布局文件,与supportDimensions中的规格一一对应。
portraitLayouts-表示卡片外观规格对应的竖向布局文件,与supportDimensions中的规格一一对应。
updateEnabled-

表示卡片是否支持周期性刷新,取值范围:

  • true:表示支持周期性刷新,可以在定时刷新(updateDuration)和定点刷新(scheduledUpdateTime)两种方式任选其一,优先选择定时刷新。
  • false:表示不支持周期性刷新。
scheduledUpdateTime-表示卡片的定点刷新的时刻,采用24小时制,精确到分钟。
updateDuration

表示卡片定时刷新的更新周期,单位为30分钟,取值为自然数。

  • 当取值为0时,表示该参数不生效。
  • 当取值为正整数N时,表示刷新周期为30*N分钟。
formConfigAbility-表示卡片的配置跳转链接,采用URI格式。
metaData-表示卡片的自定义信息,包含customizeData数组标签。
customizeData-表示自定义的卡片信息。
name表示数据项的键名称。
value表示数据项的值。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/350566
推荐阅读
相关标签
  

闽ICP备14008679号