HarmonyOS 鸿蒙Next APP整体换肤方案,图片、文字颜色、背景颜色等都需要换,特殊情况需要改尺寸

发布于 1周前 作者 yibo5220 来自 鸿蒙OS

HarmonyOS 鸿蒙Next APP整体换肤方案,图片、文字颜色、背景颜色等都需要换,特殊情况需要改尺寸 有没有比较成熟的可借鉴方案

2 回复

创建主题类来实现主题切换代码如下:

首先创建一个主题类 theme, 下面为部分参考代码:

export default class theme {
  //资源目录,将需要实现主题切换的资源变量存储在这
  current_mode: string = 'normal_mode'
  earphone_icon: Resource = $r('app.media.ic_device_earphone_hero_filled')

  //通过读取current mode实现在重启应用后可以保存应用主题数据
  constructor(current_mode: string) {
    switch (current_mode) {
      case 'normal_mode':
        this.background_color = $r('app.color.background')
        this.text_color = $r('app.color.brown')
        this.phone_icon = $r('app.media.dialer')
        break;

      case 'color_mode':
        this.background_color = $r('app.color.color_background')
        this.text_color = $r('app.color.yellow')
        this.phone_icon = $r('app.media.pwcall')
        break;

      case 'simple_mode':
        this.background_color = $r('app.color.white')
        this.text_color = $r('app.color.black')
        this.phone_icon = $r('app.media.simplicityCall')
        break;

      default:
        this.current_mode = 'normal_mode'
        this.background_color = $r('app.color.background')
        this.text_color = $r('app.color.brown')
        break;
    }
  }

  //通过不同的主题切换函数更改主题变量,并在外部通过Appstorage实现应用内共享和画面重现渲染
  light_mode() {
    this.font_color = $r('app.color.black')
    this.background_color = $r('app.color.white')
    this.earphone_icon = $r('app.media.ic_device_earphone_hero_filled')
  }

  dark_mode() {
    this.font_color = $r('app.color.white')
    this.background_color = $r('app.color.background')
    this.earphone_icon = $r('app.media.ic_device_earphone_hero')
  }

  normal_mode() {
    this.current_mode = 'normal_mode'
    this.background_color = $r('app.color.background')
    this.text_color = $r('app.color.brown')
  }

  color_mode() {
    this.current_mode = 'color_mode'
    this.background_color = $r('app.color.color_background')
    this.text_color = $r('app.color.yellow')
  }

  simple_mode() {
    this.current_mode = 'simple_mode'
    this.background_color = $r('app.color.white')
    this.text_color = $r('app.color.black')
  }
}

在pages中调用主题类中的资源变量:(简化版框架)

import theme from '../pages/theme'

PersistentStorage.persistProp('current mode', 'normal_mode')

@Entry
@Component
struct Theme_setting {
  @StorageLink('current mode') current_mode: string = 'normal_mode'
  @StorageLink('main_theme') theme: theme = new theme(this.current_mode)
  @StorageLink('gray mode') gray_mode: number = 0;

  build() {
    Column() {
      Column() {
        Image(this.theme.phone_icon).objectFit(ImageFit.Contain)
        Text('电话').fontColor(this.theme.text_color)
        Image(this.theme.camera_icon).objectFit(ImageFit.Contain)
        Text('相机').fontColor(this.theme.text_color)
      }.width('22%').height(90)

      Image($r('app.media.find_service')).objectFit(ImageFit.Contain).height(200)
    }
    .grayscale(this.gray_mode)
    .height('100%').backgroundColor(this.theme.background_color)
  }
}

首先引用主题类:

import theme from '../pages/theme'

将主题状态持久化:

PersistentStorage.persistProp('current mode', 'normal_mode')

AppStorage生成主题类实例,并实现应用内共享,重新渲染:

@StorageLink('current mode')
current_mode: string = 'normal_mode'
@StorageLink('main_theme')
theme: theme = new theme(this.current_mode)

在text,image等组件,或者背景中使用主题内的资源:

Image(this.theme.setting_icon)
Text('设置').fontColor(this.theme.text_color)

在page中切换主题:

Button('normal mode')
  .fontColor(this.theme.text_color)
  .onClick(() => {
    this.theme.normal_mode() //调用主题类中的主题切换函数
    this.current_mode = 'normal_mode' //将当前主题状态持久化保存
  })

更多关于HarmonyOS 鸿蒙Next APP整体换肤方案,图片、文字颜色、背景颜色等都需要换,特殊情况需要改尺寸的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


针对HarmonyOS鸿蒙Next APP整体换肤方案,图片、文字颜色、背景颜色等全面更换,以及特殊情况下的尺寸调整,可通过以下方式实现:

  1. 主题资源管理:利用鸿蒙系统提供的主题管理功能,创建多个主题资源包,每个包内包含不同风格的图片、颜色等资源。在APP中根据用户选择或预设条件动态加载对应的主题资源。

  2. 颜色配置:通过XML或代码方式定义颜色资源,并在布局和组件中引用这些颜色资源。换肤时,只需替换颜色资源文件或动态修改颜色值即可。

  3. 图片管理:将不同主题的图片资源分类存放,并在换肤时根据主题ID加载对应的图片资源。可通过设置ImageView等组件的src属性来实现图片切换。

  4. 尺寸调整:对于特殊情况下的尺寸调整,可通过布局文件中的layout_width、layout_height属性或代码中的宽度、高度设置来实现。同时,可利用ConstraintLayout等布局容器提供的约束条件来灵活调整组件尺寸。

  5. 动态应用:在APP中监听换肤事件,当触发换肤操作时,遍历所有需要换肤的组件,根据新主题资源重新设置其颜色、图片和尺寸等属性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部