HarmonyOS6 - 鸿蒙电商页面实战案例
开发环境为:
开发工具:DevEco Studio 6.0.1 Release
API版本是:API21
本文所有代码都已使用模拟器测试成功!
1、需求分析
一共三个页面,如下:
- 登录页面
- 登录首页
- 个人中心
页面效果如下:



2、步骤分析
- 编写登录页面
- 编写登录成功首页
- 编写个人中心页面
- 常量抽取
- 调试优化
3、资源准备
首先需要准备如下资源文件:

以上图片文件放入如下目录中:

4、登录页面
编写登录页面代码,如下:
js
import CommonConstants from './CommonConstants'
import prompt from '@ohos.promptAction'
import router from '@ohos.router'
/**
* 登录页面
*/
@Extend(TextInput) function inputStyle() { // 输入文本框样式
.placeholderColor($r('app.color.placeholder_color'))
.height($r('app.float.login_input_height'))
.fontSize($r('app.float.big_text_size'))
.backgroundColor($r('app.color.background'))
.width(CommonConstants.FULL_PARENT)
.padding({ left: CommonConstants.INPUT_PADDING_LEFT })
.margin({ top: $r('app.float.input_margin_top') })
}
// Line组件的自定义样式扩展
@Extend(Line) function lineStyle() {
.width(CommonConstants.FULL_PARENT) // 宽度为父组件的100%
.height($r('app.float.line_height')) // 高度
.backgroundColor($r('app.color.line_color')) // 背景颜色
}
// Text组件的蓝色文本样式
@Extend(Text) function blueTextStyle() {
.fontColor($r('app.color.login_blue_text_color')) // 字体颜色
.fontSize($r('app.float.small_text_size')) // 字体大小
.fontWeight(FontWeight.Medium) // 字体粗细
}
@Entry
@Component
struct Login {
@State
account: string = '' // 登录的账号
@State
password: string = '' // 登录的密码
@State
isShowProgress: boolean = false // 控制是否显示 进度条
private timeOutId: number = -1 // 控制登录超时时间的变量
login(): void {
if (this.account === '' || this.password === '') {
prompt.showToast({ // 开启一个确认的弹层
message: $r('app.string.input_empty_tips')
})
} else {
this.isShowProgress = true
if (this.timeOutId === -1) {
// 设置一个定时器,定时两秒
this.timeOutId = setTimeout(() => {
// 2秒之后执行的函数
this.isShowProgress = false
this.timeOutId = -1
// 页面跳转
router.replaceUrl({
url: "pages/Index",
params: {
sendMsg: this.account
}
}) // 目标页面会替换当前页,并销毁当前页。
}, CommonConstants.LOGIN_DELAY_TIME)
}
}
}
aboutToDisappear() {
// 取消定时器
clearTimeout(this.timeOutId)
this.timeOutId = -1
}
@Builder
imageButton(image: Resource) {
// 构建按钮图片: 本质上,就是在按钮里面增加一个Image组件。
Button({ type: ButtonType.Circle, stateEffect: true }) { // 圆形的按钮, 并且,按钮按下去开启切换效果
Image(image)
}
.height($r('app.float.other_login_image_size')) // 图片按钮高度
.width($r('app.float.other_login_image_size')) // 图片按钮宽度
.backgroundColor($r('app.color.background')) // 背景颜色
}
build() {
Column() { // 登录页面的布局
Image($r('app.media.logo')) // Logo图片
.width($r('app.float.logo_image_size'))
.height($r('app.float.logo_image_size'))
.margin({
top: $r('app.float.logo_margin_top'),
bottom: $r('app.float.logo_margin_bottom')
})
//登录标题
Text($r('app.string.login_page'))
.fontSize($r('app.float.page_title_text_size'))
.fontWeight(FontWeight.Medium)
.fontColor($r('app.color.title_text_color'))
// 登录了解更多的text
Text($r('app.string.login_more'))
.fontSize($r('app.float.normal_text_size'))
.fontColor($r('app.color.login_more_text_color'))
.margin({ bottom: $r('app.float.login_more_margin_bottom'), top: $r('app.float.login_more_margin_top') })
// 账号输入框
TextInput({ placeholder: $r('app.string.account') })
.inputStyle()
.maxLength(CommonConstants.INPUT_ACCOUNT_LENGTH)
.type(InputType.Number)
.onChange((value: string) => {
this.account = value
})
Line().lineStyle() // 账号输入框下面的一条线
// 密码输入框
TextInput({ placeholder: $r('app.string.password') })
.inputStyle()
.maxLength(CommonConstants.INPUT_PASSWORD_LENGTH)
.type(InputType.Password)
.onChange((value: string) => {
this.password = value
})
Line().lineStyle() // 账号输入框下面的一条线
Row() { // 短信提示, 和忘记密码
Text($r('app.string.message_login')).blueTextStyle()
Text($r('app.string.forgot_password')).blueTextStyle()
}
.justifyContent(FlexAlign.SpaceBetween)
.width(CommonConstants.FULL_PARENT)
.margin({ top: $r('app.float.forgot_margin_top') })
//登录按钮
Button($r('app.string.login'), { type: ButtonType.Capsule }) // 胶囊形状的按钮
.width(CommonConstants.BUTTON_WIDTH)
.height($r('app.float.login_button_height'))
.fontSize($r('app.float.normal_text_size'))
.fontWeight(FontWeight.Medium)
.backgroundColor($r('app.color.login_button_color'))
.margin({
top: $r('app.float.login_button_margin_top'),
bottom: $r('app.float.login_button_margin_bottom')
})
.onClick(() => {
// 登录的事件
this.login()
})
// 注册账号文本
Text($r('app.string.register_account'))
.fontColor($r('app.color.login_blue_text_color')) // 字体颜色
.fontSize($r('app.float.normal_text_size')) // 字体大小
.fontWeight(FontWeight.Medium) // 字体粗细
if (this.isShowProgress) {
LoadingProgress() // 圆圈形状的进度条
.color($r('app.color.loading_color')) // 颜色
.width($r('app.float.login_progress_size')) // 宽度
.height($r('app.float.login_progress_size')) // 高度
.margin({ top: $r('app.float.login_progress_margin_top') }) // 上方边距
}
Blank()
// 其他登录方式文本
Text($r('app.string.other_login_method'))
.fontColor($r('app.color.other_login_text_color')) // 字体颜色
.fontSize($r('app.float.little_text_size')) // 字体大小
.fontWeight(FontWeight.Medium) // 字体粗细
.margin({
top: $r('app.float.other_login_margin_top'),
bottom: $r('app.float.other_login_margin_bottom')
}) // 边距
// 三种登录方式
Row({ space: CommonConstants.LOGIN_METHODS_SPACE }) {
this.imageButton($r('app.media.login_method1')) // 登录方式1
this.imageButton($r('app.media.login_method2')) // 登录方式2
this.imageButton($r('app.media.login_method3')) // 登录方式3
}
}
.backgroundColor($r('app.color.background'))
.height(CommonConstants.FULL_PARENT)
.width(CommonConstants.FULL_PARENT)
.padding({
left: $r('app.float.page_padding_hor'),
right: $r('app.float.page_padding_hor'),
bottom: $r('app.float.login_page_padding_bottom')
})
}
}
常量类CommonConstants文件代码如下:
js
/**
* 所有功能的通用常量。
*/
export default class CommonConstants {
/**
* 账号的输入长度。
*/
static readonly INPUT_ACCOUNT_LENGTH = 11;
/**
* 密码的输入长度。
*/
static readonly INPUT_PASSWORD_LENGTH = 8;
/**
* 输入框的左填充。
*/
static readonly INPUT_PADDING_LEFT = 0;
/**
* 模拟登录的延迟时间。
*/
static readonly LOGIN_DELAY_TIME = 2000;
/**
* 组件的通用间距。
*/
static readonly COMMON_SPACE = 12;
/**
* 首页的标题文本。
*/
static readonly HOME_TITLE = '首页';
/**
* 设置页面的标题文本。
*/
static readonly MINE_TITLE = '我的';
/**
* 其他登录方法的间距。
*/
static readonly LOGIN_METHODS_SPACE = 44;
/**
* 组件的宽度或高度覆盖父组件。
*/
static readonly FULL_PARENT = '100%';
/**
* 按钮的宽度。
*/
static readonly BUTTON_WIDTH = '90%';
/**
* 设置列表的宽度。
*/
static readonly SET_LIST_WIDTH = '42%';
/**
* 首页标签索引。
*/
static readonly HOME_TAB_INDEX = 0;
/**
* 我的设置也没标签索引。
*/
static readonly MINE_TAB_INDEX = 1;
}
5、登录首页
登录成功后调转到【Index.ets】页面,代码如下:
js
/**
* APP登录成功首页
*/
import CommonConstants from './CommonConstants'
import Home from './Home'
import MySetting from './MySetting'
import router from '@ohos.router';
@Entry
@Component
struct Index {
@State
currentIndex: number = CommonConstants.HOME_TAB_INDEX // 当前默认的页签索引为:首页的索引
private tabsController: TabsController = new TabsController()
@State
account: number = 111
onPageShow() { // 接受路由参数
let acc = router.getParams() as Record<string, number>
if (acc) {
this.account = acc['sendMsg']
}
}
@Builder
TabBuilder(title: string, index: number, selectedImg: Resource, normalImg: Resource) {
Column() {
Image(this.currentIndex == index ? selectedImg : normalImg)
.width($r('app.float.mainPage_baseTab_size'))
.height($r('app.float.mainPage_baseTab_size'))
Text(title)
.margin({ top: $r('app.float.mainPage_baseTab_top') })
.fontSize($r('app.float.main_tab_fontSize'))
.fontColor(this.currentIndex === index ? $r('app.color.mainPage_selected') : $r('app.color.mainPage_normal'))
}
.justifyContent(FlexAlign.Center)
.height($r('app.float.mainPage_barHeight'))
.width(CommonConstants.FULL_PARENT)
.onClick(() => {
this.currentIndex = index
this.tabsController.changeIndex(this.currentIndex) // 修改页签的索引,从而造成页面的切换
})
}
build() {
Tabs({
barPosition: BarPosition.End, // 底部展示
controller: this.tabsController // 页签容器的控制器
}) { // 标签容器
// 第一个页签: 首页
TabContent() {
Home()
}
.padding({ left: $r('app.float.mainPage_padding'), right: $r('app.float.mainPage_padding') })
.backgroundColor($r('app.color.mainPage_backgroundColor'))
.tabBar(this.TabBuilder(CommonConstants.HOME_TITLE, CommonConstants.HOME_TAB_INDEX,
$r('app.media.home_selected'), $r('app.media.home_normal')))
// 第二个页签: 我的设置页面
TabContent() {
MySetting({account: this.account})
}
.padding({ left: $r('app.float.mainPage_padding'), right: $r('app.float.mainPage_padding') })
.backgroundColor($r('app.color.mainPage_backgroundColor'))
.tabBar(this.TabBuilder(CommonConstants.MINE_TITLE, CommonConstants.MINE_TAB_INDEX,
$r('app.media.mine_selected'), $r('app.media.mine_normal')))
}
.width(CommonConstants.FULL_PARENT)
.backgroundColor(Color.White)
.barHeight($r('app.float.mainPage_barHeight'))
.barMode(BarMode.Fixed)
}
}
【Index.ets】页面只做布局,首页内容是在【Home.ets】页面,代码如下:
js
/**
* 首页
*/
import CommonConstants from './CommonConstants'
import ItemData from './ItemData'
import DataModel from './DataModel'
// @Entry
@Component
export default struct Home {
// 轮播控制器的实例
private swiperController: SwiperController = new SwiperController()
build() {
Scroll(){
Column({space: CommonConstants.COMMON_SPACE}){
// 第一部分: 标题
Column() { // 创建一个子列布局
Text($r('app.string.mainPage_tabTitles_home')) // 显示"首页"的文本 标题
.fontWeight(FontWeight.Medium) // 设置文本字重为中等
.fontSize($r('app.float.page_title_text_size')) // 设置文本字号
.margin({ top: $r('app.float.mainPage_tabTitles_margin') }) // 设置文本上边距
.padding({ left: $r('app.float.mainPage_tabTitles_padding') }) // 设置文本左边距
}
.width(CommonConstants.FULL_PARENT) // 设置列宽度为父容器的100%
.alignItems(HorizontalAlign.Start) // 子元素的水平对齐方式为开始
// 第二部分: 轮播图片
Swiper(this.swiperController) {
ForEach(DataModel.getSwiperImages(), (item: Resource) => {
// 构建每一张图片组件
Image(item)
.borderRadius($r('app.float.home_swiper_borderRadius'))
})
}
.autoPlay(true) // 轮播组件自动播放
.margin({top: $r('app.float.home_swiper_margin')})
// 第三部分: 菜单列表
Grid() { // 网格布局
ForEach(DataModel.getFirstGridData(), (item: ItemData) => {
GridItem() {
Column() {
Image(item.img)
.width($r('app.float.home_homeCell_size')) // 设置图片宽度
.height($r('app.float.home_homeCell_size')) // 设置图片高度
Text(item.title)
.fontSize($r('app.float.little_text_size')) // 设置文本字号
.margin({ top: $r('app.float.home_homeCell_margin') }) // 设置文本上边距
}
}
})
}
.columnsTemplate('1fr 1fr 1fr 1fr') // 设置网格的列模板,每列平分空间
.rowsTemplate('1fr 1fr') // 设置网格的行模板,每行平分空间
.columnsGap($r('app.float.home_grid_columnsGap')) // 设置列之间的间隔
.rowsGap($r('app.float.home_grid_rowGap')) // 设置行之间的间隔
.padding({ top: $r('app.float.home_grid_padding'), bottom: $r('app.float.home_grid_padding') }) // 设置网格内边距
.height($r('app.float.home_grid_height')) // 设置网格高度
.backgroundColor(Color.White) // 设置网格背景色为白色
.borderRadius($r('app.float.home_grid_borderRadius')) // 设置网格边角半径
// 第四部分: 频道列表
Text($r('app.string.home_list')) // 显示"列表"的文本
.fontSize($r('app.float.normal_text_size')) // 设置文本字号
.fontWeight(FontWeight.Medium) // 设置文本字重
.width(CommonConstants.FULL_PARENT) // 设置文本宽度为父容器的100%
.margin({ top: $r('app.float.home_text_margin') }) // 设置文本上边距
Grid() {
ForEach(DataModel.getSecondGridData(), (item: ItemData) => {
GridItem() {
Column(){
Text(item.title)
.fontSize($r('app.float.normal_text_size')) // 设置文本字号
.fontWeight(FontWeight.Medium) // 设置文本字重
Text(item.others)
.margin({ top: $r('app.float.home_list_margin') }) // 设置文本上边距
.fontSize($r('app.float.little_text_size')) // 设置文本字号
.fontColor($r('app.color.home_grid_fontColor')) // 设置文本颜色
}
.alignItems(HorizontalAlign.Start) // 两个文本框,在水平方向居左对齐
}
.padding({ top: $r('app.float.home_list_padding'), left: $r('app.float.home_list_padding') }) // 设置网格项内边距
.borderRadius($r('app.float.home_backgroundImage_borderRadius')) // 设置网格项边角半径
.align(Alignment.TopStart) // 设置网格项对齐方式为顶部开始
.backgroundImage(item.img) // 设置网格项背景图像
.backgroundImageSize(ImageSize.Cover) // 设置背景图像尺寸模式为覆盖
.width(CommonConstants.FULL_PARENT) // 设置网格项宽度为父容器的100%
.height(CommonConstants.FULL_PARENT) // 设置网格项高度为父容器的100%
})
}
.width(CommonConstants.FULL_PARENT) // 设置网格宽度为父容器的100%
.height($r('app.float.home_secondGrid_height')) // 设置网格高度
.columnsTemplate('1fr 1fr') // 设置网格的列模板,每列平分空间
.rowsTemplate('1fr 1fr') // 设置网格的行模板,每行平分空间
.columnsGap($r('app.float.home_grid_columnsGap')) // 设置列之间的间隔
.rowsGap($r('app.float.home_grid_rowGap')) // 设置行之间的间隔
.margin({ bottom: $r('app.float.setting_button_bottom') }) // 设置网格底部外边距
}
}
.height(CommonConstants.FULL_PARENT)
}
}
【ItemData.ets】代码如下:
js
export default class ItemData{
/**
* 列表项的文本。
*/
title: Resource;
/**
* 列表项的图片。
*/
img: Resource;
/**
* 列表项的其他资源。
*/
others?: Resource;
constructor(title: Resource, img: Resource, others?: Resource) {
this.title = title;
this.img = img;
this.others = others;
}
}
【DataModel.ets】代码如下:
js
import ItemData from './ItemData'
export class DataModel{
/**
* 获取轮播图的图片数据。
*
* @return {Array<Resource>} 返回轮播图图片数组。
*/
getSwiperImages(): Array<Resource> {
let swiperImages: Resource[] = [
$r('app.media.fig1'),
$r('app.media.fig2'),
$r('app.media.fig3'),
$r('app.media.fig4')
];
return swiperImages;
}
/**
* 第三部分的数据: 菜单列表数据
* @returns
*/
getFirstGridData(): Array<ItemData> {
let firstGridData: ItemData[] = [
new ItemData($r('app.string.my_love'), $r('app.media.love')),
new ItemData($r('app.string.history_record'), $r('app.media.record')),
new ItemData($r('app.string.message'), $r('app.media.message')),
new ItemData($r('app.string.shopping_cart'), $r('app.media.shopping')),
new ItemData($r('app.string.my_goal'), $r('app.media.target')),
new ItemData($r('app.string.group'), $r('app.media.circle')),
new ItemData($r('app.string.favorites'), $r('app.media.favorite')),
new ItemData($r('app.string.recycle_bin'), $r('app.media.recycle'))
];
return firstGridData;
}
/**
* 第四部分的数据: 频道列表数据
* @returns
*/
getSecondGridData(): Array<ItemData> {
let secondGridData: ItemData[] = [
new ItemData($r('app.string.mainPage_top'), $r('app.media.top'), $r('app.string.mainPage_text_top')),
new ItemData($r('app.string.mainPage_new'), $r('app.media.new'), $r('app.string.mainPage_text_new')),
new ItemData($r('app.string.mainPage_brand'), $r('app.media.brand'), $r('app.string.mainPage_text_brand')),
new ItemData($r('app.string.mainPage_found'), $r('app.media.found'), $r('app.string.mainPage_text_found'))
];
return secondGridData;
}
/**
* 获取设置列表的数据。
*
* @return {Array<PageResource>} 返回设置列表数据数组。
*/
getSettingListData(): Array<ItemData> {
let settingListData: ItemData[] = [
new ItemData($r('app.string.setting_list_news'), $r('app.media.news'), $r("app.string.setting_toggle")),
new ItemData($r('app.string.setting_list_data'), $r('app.media.data')),
new ItemData($r('app.string.setting_list_menu'), $r('app.media.menu')),
new ItemData($r('app.string.setting_list_about'), $r('app.media.about')),
new ItemData($r('app.string.setting_list_storage'), $r('app.media.storage')),
new ItemData($r('app.string.setting_list_privacy'), $r('app.media.privacy'))
];
return settingListData;
}
}
// 导入
export default new DataModel()
6、个人中心
【MySetting.ets】页面属于个人中心页面,代码如下:
js
/**
* 我的设置页面
*/
import CommonConstants from './CommonConstants'
import ItemData from './ItemData'
import DataModel from './DataModel'
import router from '@ohos.router';
// @Entry
@Component
export default struct MySetting {
private account: number;
// 构建设置单元格的函数,接收一个ItemData类型的item作为参数
@Builder
settingCell(item: ItemData) {
Row() { // 创建一个行布局
Row({ space: CommonConstants.COMMON_SPACE }) { // 创建一个有间隔的内嵌行布局
Image(item.img) // 显示图像
.width($r('app.float.setting_size')) // 设置图像的宽度
.height($r('app.float.setting_size')) // 设置图像的高度
Text(item.title) // 显示文本
.fontSize($r('app.float.normal_text_size')) // 设置文本的字号
}
// 如果item的others属性为空,则显示一个图像,否则显示一个开关组件
if (item.others == null) {
Image($r('app.media.right_grey')) // 显示一个灰色的箭头图像
.width($r('app.float.setting_jump_width')) // 设置图像宽度
.height($r('app.float.setting_jump_height')) // 设置图像高度
} else {
Toggle({ type: ToggleType.Switch, isOn: false }) // 显示一个开关组件
}
}
.justifyContent(FlexAlign.SpaceBetween) // 设置内容在主轴方向的对齐方式为两端对齐
.width(CommonConstants.FULL_PARENT) // 设置宽度为父容器的100%
.padding({ // 设置内边距
left: $r('app.float.setting_settingCell_left'),
right: $r('app.float.setting_settingCell_right')
})
}
build() {
Scroll(){
Column({space: CommonConstants.COMMON_SPACE}){
Column(){ // 创建一个内嵌的列布局
Text($r('app.string.mainPage_tabTitles_mine')) // 显示文本
.fontWeight(FontWeight.Medium) // 设置字体权重
.fontSize($r('app.float.page_title_text_size')) // 设置字号
.margin({ top: $r('app.float.mainPage_tabTitles_margin') }) // 设置外边距
.padding({ left: $r('app.float.mainPage_tabTitles_padding') }) // 设置内边距
}
.width(CommonConstants.FULL_PARENT) // 设置宽度为父容器的100%
.alignItems(HorizontalAlign.Start) // 设置子项在交叉轴上的对齐方式为开始对齐
// 接下来是账户信息的布局
Row() {
Image($r('app.media.account')) // 显示账户图片
.width($r('app.float.setting_account_size')) // 设置图片宽度
.height($r('app.float.setting_account_size')) // 设置图片高度
Column() {
Text($r('app.string.setting_account_name')) // 显示账户名称
.fontSize($r('app.float.setting_account_fontSize')) // 设置字号
Text(this.account.toString()) // 显示账号
.fontSize($r('app.float.little_text_size')) // 设置字号
.margin({ top: $r('app.float.setting_name_margin') }) // 设置外边距
}
.alignItems(HorizontalAlign.Start) // 设置子项在交叉轴上的对齐方式为开始对齐
.margin({ left: $r('app.float.setting_account_margin') }) // 设置外边距
}
.margin({ top: $r('app.float.setting_account_margin') }) // 设置外边距
.alignItems(VerticalAlign.Center) // 设置子项在交叉轴上的对齐方式为居中对齐
.width(CommonConstants.FULL_PARENT) // 设置宽度为父容器的100%
.height($r('app.float.setting_account_height')) // 设置高度
.backgroundColor(Color.White) // 设置背景颜色为白色
.padding({ left: $r('app.float.setting_account_padding') }) // 设置内边距
.borderRadius($r('app.float.setting_account_borderRadius')) // 设置边角半径
// 列表布局组件
List(){
ForEach(DataModel.getSettingListData(), (item: ItemData) => {
// 构建每一个列表项
ListItem() {
this.settingCell(item)
}
.height($r('app.float.setting_list_height'))
})
}
.backgroundColor(Color.White) // 设置背景颜色为白色
.width(CommonConstants.FULL_PARENT) // 设置宽度为父容器的100%
.height(CommonConstants.SET_LIST_WIDTH) // 设置高度
.divider({ // 设置列表项之间的分割线
strokeWidth: $r('app.float.setting_list_strokeWidth'), // 设置分割线的宽度
color: Color.Grey, // 设置分割线的颜色为灰色
startMargin: $r('app.float.setting_list_startMargin'), // 设置分割线的起始边距
endMargin: $r('app.float.setting_list_endMargin') // 设置分割线的结束边距
})
.borderRadius($r('app.float.setting_list_borderRadius')) // 设置边角半径
.padding({ top: $r('app.float.setting_list_padding'), bottom: $r('app.float.setting_list_padding') }) // 设置内边距
Blank()
// 退出按钮的布局
Button($r('app.string.setting_button'), { type: ButtonType.Capsule }) // 创建一个按钮
.width(CommonConstants.BUTTON_WIDTH) // 设置按钮宽度
.height($r('app.float.login_button_height')) // 设置按钮高度
.fontSize($r('app.float.normal_text_size')) // 设置字号
.fontColor($r('app.color.setting_button_fontColor')) // 设置字体颜色
.fontWeight(FontWeight.Medium) // 设置字体权重
.backgroundColor($r('app.color.setting_button_backgroundColor')) // 设置背景颜色
.margin({ bottom: $r('app.float.setting_button_bottom')}) // 设置外边距
.onClick(() => {
// 页面跳转
router.replaceUrl({
url: "pages/Login",
params: {
sendMsg: this.account
}
})
})
}
.height(CommonConstants.FULL_PARENT)
}
}
}
7、资源文件
所有页面中涉及到的变量都抽取出来了,在如下文件中:

7.1、string.json
【base】目录和【zh_CN】目录下的string.json文件,内容如下:
js
{
"string": [
{
"name": "module_desc",
"value": "module description"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "label"
},{
"name": "login_text",
"value": "登录"
},{
"name": "login_page",
"value": "登录界面"
},{
"name": "login_more",
"value": "登录账号以使用更多服务"
},{
"name": "account",
"value": "请输入账号"
},{
"name": "password",
"value": "请输入密码"
},{
"name": "message_login",
"value": "短信验证码登录"
},{
"name": "forgot_password",
"value": "忘记密码"
},{
"name": "login",
"value": "登录"
},{
"name": "register_account",
"value": "注册账号"
},{
"name": "other_login_method",
"value": "其他方式登录"
},{
"name": "mainPage_tabTitles_home",
"value": "Home"
},{
"name": "my_love",
"value": "My favorite"
},
{
"name": "history_record",
"value": "History"
},
{
"name": "message",
"value": "Message"
},
{
"name": "shopping_cart",
"value": "Shopping cart"
},
{
"name": "my_goal",
"value": "My goal"
},
{
"name": "group",
"value": "Group"
},
{
"name": "favorites",
"value": "Favorites"
},
{
"name": "recycle_bin",
"value": "Recycle Bin"
},
{
"name": "home_list",
"value": "Home List"
},
{
"name": "mainPage_top",
"value": "Rankings"
},
{
"name": "mainPage_text_top",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_new",
"value": "New product debut"
},
{
"name": "mainPage_text_new",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_brand",
"value": "Big name flash"
},
{
"name": "mainPage_text_brand",
"value": "More Big Names"
},
{
"name": "mainPage_found",
"value": "Find good things"
},
{
"name": "mainPage_text_found",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_tabTitles_mine",
"value": "Mine"
},{
"name": "setting_account_name",
"value": "Mr. Lee"
},
{
"name": "setting_account_email",
"value": "2000000@shenhua.cc"
},{
"name": "setting_list_news",
"value": "Push Notifications"
},
{
"name": "setting_list_data",
"value": "Data Management"
},
{
"name": "setting_list_menu",
"value": "Menu Settings"
},
{
"name": "setting_list_about",
"value": "Clear Cache"
},
{
"name": "setting_list_storage",
"value": "清除缓存"
},
{
"name": "setting_list_privacy",
"value": "Privacy Agreement"
},
{
"name": "setting_toggle",
"value": "switch"
},
{
"name": "setting_button",
"value": "Logout"
},
{
"name": "input_empty_tips",
"value": "The input cannot be empty."
}
]
}
【en_US】目录下的string.json文件,内容如下:
js
{
"string": [
{
"name": "module_desc",
"value": "module description"
},
{
"name": "EntryAbility_desc",
"value": "description"
},
{
"name": "EntryAbility_label",
"value": "我的英文App"
},{
"name": "login_text",
"value": "登录"
},{
"name": "login_page",
"value": "登录界面"
},{
"name": "login_more",
"value": "登录账号以使用更多服务"
},{
"name": "account",
"value": "请输入账号"
},{
"name": "password",
"value": "请输入密码"
},{
"name": "message_login",
"value": "短信验证码登录"
},{
"name": "forgot_password",
"value": "忘记密码"
},{
"name": "login",
"value": "登录"
},{
"name": "register_account",
"value": "注册账号"
},{
"name": "other_login_method",
"value": "其他方式登录"
},
{
"name": "mainPage_tabTitles_home",
"value": "Home"
},
{
"name": "my_love",
"value": "My favorite"
},
{
"name": "history_record",
"value": "History"
},
{
"name": "message",
"value": "Message"
},
{
"name": "shopping_cart",
"value": "Shopping cart"
},
{
"name": "my_goal",
"value": "My goal"
},
{
"name": "group",
"value": "Group"
},
{
"name": "favorites",
"value": "Favorites"
},
{
"name": "recycle_bin",
"value": "Recycle Bin"
},
{
"name": "home_list",
"value": "Home List"
},
{
"name": "mainPage_top",
"value": "Rankings"
},
{
"name": "mainPage_text_top",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_new",
"value": "New product debut"
},
{
"name": "mainPage_text_new",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_brand",
"value": "Big name flash"
},
{
"name": "mainPage_text_brand",
"value": "More Big Names"
},
{
"name": "mainPage_found",
"value": "Find good things"
},
{
"name": "mainPage_text_found",
"value": "Xiamen Station, we'll see you."
},
{
"name": "mainPage_tabTitles_mine",
"value": "Mine"
},{
"name": "setting_account_name",
"value": "Mr. Lee"
},
{
"name": "setting_account_email",
"value": "2000000@shenhua.cc"
},{
"name": "setting_list_news",
"value": "Push Notifications"
},
{
"name": "setting_list_data",
"value": "Data Management"
},
{
"name": "setting_list_menu",
"value": "Menu Settings"
},
{
"name": "setting_list_about",
"value": "Clear Cache"
},
{
"name": "setting_list_storage",
"value": "清除缓存"
},
{
"name": "setting_list_privacy",
"value": "Privacy Agreement"
},
{
"name": "setting_toggle",
"value": "switch"
},{
"name": "setting_button",
"value": "Logout"
},
{
"name": "input_empty_tips",
"value": "The input cannot be empty."
}
]
}
7.2、color.json
代码如下:
js
{
"color": [
{
"name": "start_window_background",
"value": "#FFFFFF"
},
{
"name": "white",
"value": "#FFFFFF"
},
{
"name": "background",
"value": "#F1F3F5"
},
{
"name": "title_text_color",
"value": "#182431"
},
{
"name": "login_more_text_color",
"value": "#99182431"
},
{
"name": "placeholder_color",
"value": "#99182431"
},
{
"name": "line_color",
"value": "#33182431"
},
{
"name": "login_button_color",
"value": "#007DFF"
},
{
"name": "login_blue_text_color",
"value": "#007DFF"
},
{
"name": "other_login_text_color",
"value": "#838D97"
},
{
"name": "loading_color",
"value": "#182431"
},
{
"name": "mainPage_selected",
"value": "#1698CE"
},
{
"name": "mainPage_normal",
"value": "#6B6B6B"
},
{
"name": "mainPage_backgroundColor",
"value": "#F1F3F5"
},
{
"name": "home_grid_fontColor",
"value": "#99182431"
},
{
"name": "setting_button_backgroundColor",
"value": "#E5E8EA"
},
{
"name": "setting_button_fontColor",
"value": "#FA2A2D"
}
]
}
7.3、float.json
代码如下:
js
{
"float": [
{
"name": "logo_image_size",
"value": "78vp"
},
{
"name": "logo_margin_top",
"value": "100vp"
},
{
"name": "logo_margin_bottom",
"value": "8vp"
},
{
"name": "page_title_text_size",
"value": "24fp"
},
{
"name": "normal_text_size",
"value": "16fp"
},
{
"name": "big_text_size",
"value": "18fp"
},
{
"name": "small_text_size",
"value": "14fp"
},
{
"name": "little_text_size",
"value": "12fp"
},
{
"name": "login_more_margin_bottom",
"value": "30vp"
},
{
"name": "login_more_margin_top",
"value": "8vp"
},
{
"name": "login_input_height",
"value": "45vp"
},
{
"name": "forgot_margin_top",
"value": "8vp"
},
{
"name": "input_margin_top",
"value": "12vp"
},
{
"name": "line_height",
"value": "1vp"
},
{
"name": "login_button_height",
"value": "40vp"
},
{
"name": "login_button_margin_top",
"value": "87vp"
},
{
"name": "login_button_margin_bottom",
"value": "12vp"
},
{
"name": "vertical_line_margin",
"value": "15vp"
},
{
"name": "login_progress_size",
"value": "30vp"
},
{
"name": "login_progress_margin_top",
"value": "20vp"
},
{
"name": "other_login_margin_top",
"value": "50vp"
},
{
"name": "other_login_margin_bottom",
"value": "12vp"
},
{
"name": "login_page_padding_bottom",
"value": "24vp"
},
{
"name": "other_login_image_size",
"value": "48vp"
},
{
"name": "page_padding_hor",
"value": "12vp"
},
{
"name": "mainPage_baseTab_top",
"value": "4vp"
},
{
"name": "mainPage_baseTab_margin",
"value": "8vp"
},
{
"name": "mainPage_padding",
"value": "12vp"
},
{
"name": "mainPage_barHeight",
"value": "56vp"
},
{
"name": "mainPage_baseTab_size",
"value": "25vp"
},
{
"name": "main_tab_fontSize",
"value": "10fp"
},
{
"name": "mainPage_tabTitles_margin",
"value": "12vp"
},
{
"name": "mainPage_tabTitles_padding",
"value": "12vp"
},
{
"name": "home_swiper_borderRadius",
"value": "16vp"
},
{
"name": "home_swiper_margin",
"value": "24vp"
},
{
"name": "home_grid_columnsGap",
"value": "8vp"
},
{
"name": "home_grid_rowGap",
"value": "12vp"
},
{
"name": "home_grid_padding",
"value": "12vp"
},
{
"name": "home_grid_height",
"value": "124vp"
},
{
"name": "home_grid_margin",
"value": "10vp"
},
{
"name": "home_list_margin",
"value": "4vp"
},
{
"name": "home_list_padding",
"value": "8vp"
},
{
"name": "home_grid_borderRadius",
"value": "24vp"
},
{
"name": "home_text_margin",
"value": "12vp"
},
{
"name": "home_backgroundImage_borderRadius",
"value": "12vp"
},
{
"name": "home_secondGrid_height",
"value": "260vp"
},
{
"name": "home_secondGrid_margin",
"value": "10vp"
},
{
"name": "home_homeCell_size",
"value": "24vp"
},
{
"name": "home_homeCell_margin",
"value": "4vp"
},
{
"name": "home_homeCell_width",
"value": "80vp"
},
{
"name": "home_homeCell_height",
"value": "80vp"
},
{
"name": "setting_name_margin",
"value": "4vp"
},
{
"name": "setting_account_margin",
"value": "24vp"
},
{
"name": "setting_account_size",
"value": "48vp"
},
{
"name": "setting_account_fontSize",
"value": "20fp"
},
{
"name": "setting_account_text_height",
"value": "28vp"
},
{
"name": "setting_account_height",
"value": "96vp"
},
{
"name": "setting_account_padding",
"value": "24vp"
},
{
"name": "setting_account_borderRadius",
"value": "16vp"
},
{
"name": "setting_list_height",
"value": "48vp"
},
{
"name": "setting_list_padding",
"value": "4vp"
},
{
"name": "setting_list_borderRadius",
"value": "16vp"
},
{
"name": "setting_list_startMargin",
"value": "42vp"
},
{
"name": "setting_list_endMargin",
"value": "24vp"
},
{
"name": "setting_list_strokeWidth",
"value": "0.25vp"
},
{
"name": "setting_button_bottom",
"value": "55vp"
},
{
"name": "setting_size",
"value": "22vp"
},
{
"name": "setting_padding",
"value": "10vp"
},
{
"name": "setting_jump_width",
"value": "12vp"
},
{
"name": "setting_jump_height",
"value": "24vp"
},
{
"name": "setting_settingCell_left",
"value": "8vp"
},
{
"name": "setting_settingCell_right",
"value": "22vp"
}
]
}
8、小结
最后工程目录结构如下:

- 希望本文对你有所帮助!
- 本人如有任何错误或不当之处,请留言指出,谢谢!