Райан Гордон
Проектирование гладкой цветовой схемы для вашего мобильного приложения может быть потребляющим время. Почему бы не позволить пользователю выбирать свою любимую тему?
Это одна из моих любимых функций в приложениях. Он предоставляет отличный опыт для пользователей, которые не хотят привязать к одной основной цветовой схеме акцента или хотите персонализировать тему в соответствии с их собственным стилем.
В этом среднем посте мы будем работать через проект, который будет иметь ряд тем, которые пользователь может выбрать во время выполнения, как выше. Когда тема выбрана пользователем, в идеале это изменение должно происходить в режиме реального времени, а не требовать пользователя открывать приложение.
Установка и начать
IONIC, если вы не использовали его ранее, это мобильная структура приложений, которая позволяет писать мобильные приложения в HTML, CSS и Teadercript. С одной общей кодовой базой вы можете разработать приложение для iOS или Android или вы можете развернуть его как веб-приложение.
Чтобы установить IONIC, откройте терминал и введите:
NPM установить -G IONIC @ NEW
Для этого учебника шаблон Sidemenu предоставляет хорошую отправной точкой. Чтобы генерировать проект с помощью этого шаблона, введите эту команду в терминал:
Ionic Start <имя вашего приложения> Si демену
После того, как проект сгенерировал, перейдите в каталог с:
CD <Имя вашего A PP>
Теперь у вас есть Ionic Project с Sidemenu и две страницы, готовые к работе! Чтобы увидеть ваше творение, введите Ионическая подача в вашем терминале.
Настройка первых 2 тем: Todoist Red Vs Noir
Для того, чтобы настроить первые две темы, нам нужно будет завершить ряд шагов. В значительной степени все эти шаги необходимо следовать, чтобы получить работу темы.
Во-первых, нам нужно обозначить файл SCSS, который будет использоваться при применении темы. В SRC/Theme Справочник вашего проекта, вы найдете Переменные .scssss Отказ Соответствующие тематические файлы также расположены здесь. Создайте новый файл под названием:
red.theme.scss
Этот файл будет использоваться для применения первой темы. Из этого файла любой из ионного стиля по умолчанию может быть переопределен. Есть два варианта для того, как мы можем применить темы:
Вариант 1: Стайлинг просто навка и определенные элементы
Вариант 2: Применение темы на все фоновые контента
Вот пример обеих применяемых опций. Код имеет контрольную точку на полпути вниз. Если вы не хотите стиль всего приложения, прокомментируйте остальную часть кода под ним:
Это первый файл SCSS создан! Далее будет для темного режима. Создайте еще один новый файл под названием:
noir.theme.scss
Этот файл будет использоваться для применения второй темы. Нам не нужно больше меняться для второй темы, чтобы работать, кроме изменения значений Hexcode в цвет, такой как # 33333 Отказ
Важно отметить, что, хотя Нам нужно будет переименовать Класс SCSS от Тема-красный к чему-то уникально Для этой темы. Я назову мой Тема-ноар Отказ
Следующим шагом является импорт файлов SCSS в сам приложение. Это важно, в противном случае тема не будет загружена в приложение. Голова до app.scsss Файл расположен в SRC/App/app.cscss где вы можете импортировать тему, как так:
@import '../theme/red.theme';@import '../theme/noir.theme';
Теперь, когда мы создали и импортировали тематические файлы в проект, сторона SCSS позаботится! Теперь на TypeyScript и HTML.
Программно изменение темы
Изменение самой темы потребуется только еще три шага для простой настройки:
- обертка вокруг приложения
- Функция для изменения темы во время выполнения
- что-то, чтобы держать состояние текущей темы
AppState Class.
Класс AppState будет инъекционным угловым компонентом, который содержит то, что текущая тема, и это также может использоваться для обновления темы.
Не так много, как это работает, кроме того, что у него есть внутренняя переменная состояния. Когда вызывается операция Get, возвращается клон состояния. Когда набор происходит, свойство состояния обновляется с новым значением, в данном случае тема.
AppState удержит текущую тему и разрешает модификацию, но ему нужно будет импортировать в компонент, с которой вы хотите использовать его.
Когда Ionic App сначала установлена с помощью CLI, вы найдете следующий код в app.component.ts :
// used for an example of ngFor and navigation
this.pages = [
{ title: 'Default Red Theme', component: HomePage },{ title: 'List', component: ListPage }];
Отображаемый показатель массива используется для обеспечения контента для Sidemenu. Эта Sidemenu будет служить нашим Theme Switcher в этом проекте, а не на навигационном меню.
Измените значения в this.pages Чтобы отразить имена тем, которые вы хотите, чтобы пользователь видел (например, файл темы, который будет применен, и любые другие активы, такие как файлы изображений).
В этом примере «Тематический файл» будет названием класса CSS, который мы хотим использовать. Мы уже импортировали файлы SCSS к тому времени, когда приложение запущено. Так что вместо того, чтобы получить доступ к файлу, мы доступаем к корневому классу в этом файле. В случае красной темы будет применяться класс «Тема-Ноир».
Отображение доступных тем и нанесение обертки
Последний шаг, который нам нужно взять, будет добавить обертку Div. Это будет элемент верхнего уровня в app.html файл. Эта обертка будет применить к нему выбранную тему, позволяя детям также получать обновления стилей. Пример этого в app.html будет выглядеть так:
//in here you will have the rest of app.html
С точки зрения отображения, если вы соблюдались выше и переименованы в this.pages Массив на Это .темы Таким образом, он содержит ваши доступные темы, то вам не нужно ничего менять, чтобы отобразить!
Первоначально Sidemenu использовался для толкания на доступных страниц в приложении, но теперь это отличный тематический коммутатор. Имена каждой доступной темы отображаются с использованием NGFOR и некоторых databinding с Это .темы множество. Результатом будет очень простой список, который будет иметь имя темы для каждой записи. Когда запись нажата, эта тема будет применена.
На Github repo Вы можете найти лучший пример с индикатором цвета рядом с каждой записью.
Реконструировать
Хорошо, время для быстрого обзора того, что мы здесь сделали. До сих пор мы реализовали следующие изменения, чтобы получить тему работы:
- Создал тему файлы SCSS для каждой желаемой темы
- Импортировал созданные тематические файлы в основной файл SASS, расположенный в
SRC/App/app.scsss - Настройка класса AppState для удержания какая тема в настоящее время применяется
- Настройка очень маленькой функции ChangeMeMe, которая установит новую тему в AppState
- Добавлен элемент обертки над
app.htmlкоторый будет иметь эту тему к нему
Чтобы создать больше тем отсюда, скопируйте одну из файлов темы, которые вы уже создали, переименуйте его, и измените значения шестигранного цвета в этом новом файле. Вы можете сделать столько, сколько хотите! Просто убедитесь, что вы также импортируете этот новый файл темы в app.scss. Как вы сделали с первыми, в противном случае это не будет работать.
С этими пять шагов вы можете иметь динамическую тему в любом ионном приложении. Красота решения заключается в том, что она хорошо работает на всех платформах, поскольку он не использует родных плагинов – все в HTML, CSS и TS.
Как бонус, на Github repo Я реализовал два других способа представить доступные темы.
Заключение:
Динамическая тематика спасает нас от беспокойства, подойдет ли наша выбранная цветовая схема всеми зрителями. Вместо того, чтобы делать многочисленные макеты с разными схемами для оценки, мы можем просто реализовать все цветные схемы и позволить пользователю выбрать, какой из них они предпочитают во время выполнения.
Скрытая пособие в этом заключается в том, что мы можем собрать аналитику от наших пользователей, на которых тема подходит им лучше всего. В ChangeMeMe Обсуждаемая функция, веб-канал или некоторое событие могут быть отправлены указание выбора пользователя. Благодаря этому, разработчики могли бы собрать реальную обратную связь пользователя, на которой работают «работа» и которые этого не делают.
Весь исходный код для этого руководства можно найти в этом Github repo Отказ
Пожалуйста, посмотрите, оставляя звезду на репо. Я приветствую любую и все дополнения.
Оригинал: “https://www.freecodecamp.org/news/how-to-dynamically-theme-your-ionic-application-and-make-your-users-happy-ffa17e15dbf7/”