1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/zlgopen-awtk

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
theme_switch.md 4.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 22:52 91e8897

Многотемное переключение в реальном времени

AWTK поддерживает несколько тем и позволяет переключаться между ними без перезагрузки.

1. Структура каталога ресурсов

В каталоге assets создаются подкаталоги для каждой темы, например, default и dark:

assets
├── dark
│   ├── inc 
│   │   ├── data
│   │   ├── fonts
│   │   ├── images
│   │   ├── scripts
│   │   ├── strings
│   │   ├── styles
│   │   ├── ui
│   │   └── xml 
│   └── raw 
│       └── styles
└── default
    ├── inc 
    │   ├── data
    │   ├── fonts
    │   ├── images
    │   ├── scripts
    │   ├── strings
    │   ├── styles
    │   ├── ui
    │   └── xml 
    └── raw 
        ├── data
        ├── fonts
        ├── images
        ├── scripts
        ├── strings
        ├── styles
        ├── ui
        └── xml

Примечания:

  • Тема default обязательна, остальные — опциональны.
  • В теме default должны быть все ресурсы, в остальных — только уникальные файлы.
  • Ресурсы ищутся в следующем порядке: сначала в текущей теме, затем в default. Это позволяет максимально использовать общие данные.
  • На данный момент многотемное переключение поддерживается только на платформах с файловой системой.

2. Генерация ресурсов

Если требуется поддержка многотемного переключения, можно изменить скрипт update_res.py следующим образом:

themes = ['default', 'dark']

def run():
    for theme in themes:
        print('========================='+theme+' begin =========================');
        common.init(AWTK_ROOT, ASSETS_ROOT, theme, ASSET_C)
        common.updateRes()
        print('========================='+theme+' end =========================\n');

3. Связанные функции

3.1 Установка темы при инициализации

Используйте следующую функцию:

/**
 * @method assets_manager_set_theme
 * Устанавливает текущую тему.
 *
 * @param {assets_manager_t*} am asset manager объект.
 * @param {const char*} theme тема.
 *
 * @return {ret_t} возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t assets_manager_set_theme(assets_manager_t* am, const char* theme);

3.2 Динамическое переключение темы во время выполнения

Используйте следующую функцию:

/**
 * @method widget_set_theme
 * Задаёт имя темы для динамического переключения. Если имя совпадает с текущей темой, происходит полная перезагрузка ресурсов.
 *
 * > На данный момент поддерживается только на платформах с файловой системой.
 *
 * @annotation ["scriptable"]
 * @param {widget_t*} widget объект виджета.
 * @param {char*} name имя темы.
 *
 * @return {ret_t} возвращает RET_OK в случае успеха, иначе — ошибку.
 */
ret_t widget_set_theme(widget_t* widget, const char* name);

4. События

После переключения темы генерируется событие EVT_THEME_CHANGED:

  /**
   * @const EVT_THEME_CHANGED
   * Изменение темы (event_t).
   */
  EVT_THEME_CHANGED,

5. Прочее

Если проект должен поддерживать различные размеры экрана, а разница между ними слишком велика для простого использования layout, то можно использовать описанный механизм для разделения ресурсов по темам. При переключении на соответствующую тему на разных экранах проблема адаптации будет решена.

6. Ссылки

Уведомление об изменении каталога ресурсов

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/zlgopen-awtk.git
git@api.gitlife.ru:oschina-mirror/zlgopen-awtk.git
oschina-mirror
zlgopen-awtk
zlgopen-awtk
master