背景:
前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考
先上本期效果图 ,里面图片自行替换
效果图代码案例如下:
- Index里面实现
import { authentication } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AddressExchangeViewComponent } from './AddressExchangeViewComponent';
export const DATA_CONFIG: Record<string, number> = {
'NUMBER_LEN': 7, // 数字个数
'DURATION_TIME': 200, // 动画时长
'MILLENNIAL_LEN': 3 // 千分位长度
}
export const STYLE_CONFIG: Record<string, number> = {
'ITEM_GUTTER': 12, // 元素间距
'ITEM_HEIGHT': 26, // 数字元素高度
'TEXT_MARGIN': 2, // 文本间距
'PADDING_TOP': 32 // 顶部边距
}
@Entry
@Component
struct Index {
build() {
Column({ space: STYLE_CONFIG.ITEM_GUTTER }) {
Text($r('app.string.EntryAbility_label')).fontColor(Color.White)
.fontSize($r('sys.float.ohos_id_text_size_headline8'))
.width($r('app.string.digital_scroll_animation_max_size'))
.textAlign(TextAlign.Start)
.margin({left:25})
Row({ space: 10 }) {
Text(this.getDate())
.fontSize($r('app.string.ohos_id_text_size_headline'))
.fontWeight(FontWeight.Medium)
.height(30)
.fontColor(Color.White)
Text('天气 多云 18℃')
.height(30)
}
.width('100%').margin({left:15})
AddressExchangeViewComponent()
}
.padding({
top: STYLE_CONFIG.PADDING_TOP
})
.margin({ top: 60 })
.width($r('app.string.digital_scroll_animation_max_size'))
.height($r('app.string.digital_scroll_animation_max_size'))
.linearGradient({
colors: [[$r('app.color.digital_scroll_animation_background_color'), 0.0],
[$r('sys.color.ohos_id_color_background'), 0.3]]
})
}
aboutToAppear() {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
this.loginWithHuaweiID();
}
/**
* Sample code for using HUAWEI ID to log in to atomic service.
* According to the Atomic Service Review Guide, when a atomic service has an account system,
* the option to log in with a HUAWEI ID must be provided.
* The following presets the atomic service to use the HUAWEI ID silent login function.
* To enable the atomic service to log in successfully using the HUAWEI ID, please refer
* to the HarmonyOS HUAWEI ID Access Guide to configure the client ID and fingerprint certificate.
*/
private loginWithHuaweiID() {
// Create a login request and set parameters
let loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();
// Whether to forcibly launch the HUAWEI ID login page when the user is not logged in with the HUAWEI ID
loginRequest.forceLogin = false;
// Execute login request
let controller = new authentication.AuthenticationController();
controller.executeRequest(loginRequest).then((data) => {
let loginWithHuaweiIDResponse = data as authentication.LoginWithHuaweiIDResponse;
let authCode = loginWithHuaweiIDResponse.data?.authorizationCode;
// Send authCode to the backend in exchange for unionID, session
}).catch((error: BusinessError) => {
hilog.error(0x0000, 'testTag', 'error: %{public}s', JSON.stringify(error));
if (error.code == authentication.AuthenticationErrorCode.ACCOUNT_NOT_LOGGED_IN) {
// HUAWEI ID is not logged in, it is recommended to jump to the login guide page
}
});
}
private getDate() {
const now = new Date();
const year = now.getFullYear();
const month = now.getMonth() + 1; // 注意:月份是从0开始计数的
const day = now.getDate();
const hours = now.getHours();
const minutes = now.getMinutes();
const seconds = now.getSeconds();
return `${year} 年 ${month} 月 ${day} 日`
}
}
- AddressExchangeViewComponent 里面实现
import { promptAction } from "@kit.ArkUI"
@Preview
@Component
export struct AddressExchangeViewComponent {
build() {
Column({ space: 16 }) {
Row() {
Text('附近汽车租赁门店')
.fontSize(18)
.fontColor(Color.Black)
Text('查看更多>')
.fontSize(15)
.fontColor(Color.Black)
}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10).onClick(() => {
})
Row({ space: 20 }) {
Column({ space: 10 }) {
Text() {
Span('小王汽车租赁门店')
}.fontWeight(FontWeight.Bold).fontSize(13)
Row({space:4}) {
Image($r('app.media.weizhi')).width(18).height(18)
Text('距离1.02km').fontSize(10).fontColor('#5EB761')
}
Text('预计3分钟路程').fontSize(10).fontColor('#2EB59F')
}
.width('40%')
.borderRadius(4)
.backgroundColor('#F5F9F8')
.padding(8)
.alignItems(HorizontalAlign.Start)
Column({ space: 10 }) {
Text() {
Span('小贾汽车租赁门店')
}.fontWeight(FontWeight.Bold).fontSize(13)
Row({space:4}) {
Image($r('app.media.weizhi')).width(18).height(18)
Text('距离5km').fontSize(10).fontColor('#5EB761')
}
Text('预计23分钟路程').fontSize(10).fontColor('#2EB59F')
}
.width('40%')
.borderRadius(4)
.backgroundColor('#F5F9F8')
.padding(8)
.alignItems(HorizontalAlign.Start)
}
Row({ space: 20 }) {
Column({ space: 10 }) {
Text() {
Span('小明汽车租赁门店')
}.fontWeight(FontWeight.Bold).fontSize(13)
Row({space:4}) {
Image($r('app.media.weizhi')).width(18).height(18)
Text('距离1.02km').fontSize(10).fontColor('#5EB761')
}
Text('预计3分钟路程').fontSize(10).fontColor('#2EB59F')
}
.width('40%')
.borderRadius(4)
.backgroundColor('#F5F9F8')
.padding(8)
.alignItems(HorizontalAlign.Start)
Column({ space: 10 }) {
Text() {
Span('小朱汽车租赁门店')
}.fontWeight(FontWeight.Bold).fontSize(13)
Row({space:4}) {
Image($r('app.media.weizhi')).width(18).height(18)
Text('距离5km').fontSize(10).fontColor('#5EB761')
}
Text('预计23分钟路程').fontSize(10).fontColor('#2EB59F')
}
.width('40%')
.borderRadius(4)
.backgroundColor('#F5F9F8')
.padding(8)
.alignItems(HorizontalAlign.Start)
}
Button($r('app.string.EntryAbility_label'))
.fontColor(Color.White)
.height(40)
.backgroundColor('#5EB761')
.width(200)
.onClick(() => {
promptAction.showToast({
message: '今日机器出现故障,请找工作室人员解决'
});
})
Row() {
Text('我的服务')
.fontSize(18)
.fontColor(Color.Black)
Text('查看更多 >')
.fontSize(15)
.fontColor(Color.Black)
}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10).onClick(() => {
})
Column() {
Row() {
this.msgRelated($r('app.media.j1'), '我的优惠', () => {
})
this.msgRelated($r('app.media.j3'), '邀请有奖', () => {
})
this.msgRelated($r('app.media.j4'), '收藏/看过', () => {
})
}
.width('95%')
.height(80)
.margin({
top: 10,
left: 12,
right: 12
})
.backgroundColor(Color.White)
.justifyContent(FlexAlign.SpaceAround)
}
.width('95%')
.height(80)
.margin({
top: 10,
bottom: 4,
left: 12,
right: 12
})
.borderRadius(10)
.borderWidth(1)
.borderColor('#35B6BD')
.backgroundColor(Color.White)
.justifyContent(FlexAlign.SpaceAround)
}
.width($r('app.string.address_exchange_content_size'))
.height(178)
.margin($r('app.string.ohos_id_card_margin_start'))
}
//消息相关
@Builder
msgRelated(src: Resource, title: string, onClick?: () => void) {
Column() {
Image(src).width(24)
Text(title).fontSize(11).fontColor('#222222').margin({ top: 8 })
}.onClick(() => {
onClick?.()
})
}
}
最近文章>>>>>>>>>>>
HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程
若本文对您稍有帮助,诚望您不吝点赞,多谢。
有兴趣的同学可以点击查看源码
- gitee:https://gitee.com/jiaojiaoone/explore-harmony-next/tree/case%2Fwanandroid/
- github:https://github.com/JasonYinH/ExploreHarmonyNext.git