Евгений Легоцкой5 марта 2018 г. 2:13

Android. Java vs Qt QML - Урок 000. Включение Material Design

При разработке как на Java, так и на Qt QML требуется включение Material Design.

Material Design на Java

В случае с Java достаточно включить оформление темы в файле styles.xml и задать необходимую цветовую гамму для приложения.

styles.xml

<resources>

    <style name="AppTheme" parent="android:Theme.Material">
        <!-- Main theme colors -->
        <!--   your app branding color for the app bar -->
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
        <!--   theme UI controls like checkboxes and text fields -->
        <item name="android:colorAccent">@color/colorAccent</item>
    </style>

</resources>

colors.xml

Цвета задаются в данном файле.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#FF4081</color>
</resources>

Material Design на Qt QML

Для того, чтобы использовать Material Design на Qt QML, необходимо включить использование Qt Quick Controls 2 в профайле проекта.

QT += quick quickcontrols2

Далее подключаем класс QQuickStyle в файле main.cpp, чтобы с помощью статического метода данного класса включить стиль оформления Material Design для всего приложения.

#include <QGuiApplication>
#include <QQuickStyle> // Класс для включения стилизации
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    QQuickStyle::setStyle("Material"); // Включение Material Design

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    return app.exec();
}

Изменение цветового оформления

Для изменения цветового оформления стиля используется конфигурационный файл qtquickcontrols2.conf, который должен быть размещён в корне проекта рядом с профайлом проекта. Можете добавить этот файл в ресурсы, чтобы проще было работать с данным файлом из IDE.

[Material]
Primary=#3F51B5
Accent=#FF4081
Theme=#303F9F
Foreground=#ffff00
Background=#00ffff

Параметры настройки цветовой схемы

В Java присутствуют следующие параметры настройки цветовой схемы

  • colorPrimary - основной цвет, например цвет Action Bar
  • colorPrimaryDark - цвет строки состояния
  • textColorPrimary - цвет текста для надписей поверх элементов с фоном colorPrimary
  • windowBackground - цвет фона приложения
  • navigationBarColor - цвет цвет навигационного меню телефона
  • colorAccent - цвет элементов, таких как чекбоксы и т.д.

В Qt QML имеется лишь пять цветовых настроек

  • Primary - основной цвет, элементы похожие на Action Bar
  • Accent - цвет элементов, таких как чекбоксы
  • Theme - цвет темы, применяется как для главного окна приложения в качестве фона, так и для всплывающих меню или иных других элементов. Может быть переопределена также свойствами Foreground и Background
  • Foreground - отдельная цветовая настройка темы, может применяться для текста, переолределяет установки Theme.
  • Background - применяется для определения фона таких элементов как меню, Navigation Drawer и т.д. переолределяет установки Theme.

Для Theme можно в качестве значения использовать System, что будет означать использование системных цветовых палитр. Но при этом можно провести корректировку цвета с помощью Foreground и Background.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Поддержать автора Donate
A

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

Это актуально для изменения цвета. В файле qtquickcontrols2.conf переменная Primary должна влиять на цвет приложения соответственно и цвет ApplicationBar должен поменяться. Но у status bar вроде как нужно запускать код в Java потоке Android приложения.

Вот есть такое решение

QtAndroid::runOnAndroidThread([=]()
{
    QAndroidJniObject window = QtAndroid::androidActivity().callObjectMethod("getWindow", "()Landroid/view/Window;");
    window.callMethod<void>("addFlags", "(I)V", 0x80000000);
    window.callMethod<void>("clearFlags", "(I)V", 0x04000000);
    window.callMethod<void>("setStatusBarColor", "(I)V", 0xffffffff); // Desired statusbar color
});

Для изменения цвета текста

QAndroidJniObject decorView = window.callObjectMethod("getDecorView", "()Landroid/view/View;");
decorView.callMethod<void>("setSystemUiVisibility", "(I)V", 0x00002000);

Есть ещё вот такой репозиторий, который должен с этим работать github . Но насколько он актуален, я не знаю.
Но думаю, что лучше подключите проект из github в своём проекте. Он выглядит достаточно адекватным на беглый взгляд.

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Timeweb

Позвольте мне порекомендовать вам отличный хостинг, на котором расположен EVILEG.

В течение многих лет Timeweb доказывает свою стабильность.

Для проектов на Django рекомендую VDS хостинг

Посмотреть Хостинг
Поделиться в социальных сетях
Donate

Проект EVILEG перешёл на некоммерческую основу и будет развиваться исключительно на энтузиазме создателя сайта, энтузиазме пользователей, пожертвованиях и реферальной системе хостинга

Спасибо за вашу поддержку

Доступные способы поддержки проекта

PayPal

PatreonYooMoneyПодробнее
AB

C++ - Тест 006. Перечисления

  • Результат:30баллов,
  • Очки рейтинга-10
МХ

C++ - Тест 003. Условия и циклы

  • Результат:42баллов,
  • Очки рейтинга-8
AB

C++ - Тест 005. Структуры и Классы

  • Результат:50баллов,
  • Очки рейтинга-4
Популярные публикации за последние 90 дней
Последние комментарии

EVILEG-CORE. Кэширование свойств объектов моделей с помощью model_cached_property

Здравствуйте. В общем меня интересует такой вопрос. Я пробовал это на Like , Dislike. Как я понимаю если не перевалидировать кеш то ничего не изменится на странице. Вернётся значение из кэша? От…
A

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Здравствуйте! Подскажите как сделать запрос к базе SQLite с двумя параметрами, в итоге нужно получить не список строк, а только факт наличия строк, соответсвующи именно двум условиям. В SQL…
A

Django - Урок 011. Добавление комментариев на сайт с Django

https://mir74.ru/27323-12-krasavic-sdelali-podarok-stalnomu-gigantu.-rabotnicy-mmk-snyalis-dlya-yubileynogo-fotokalendarya.html
a

Django - Урок 011. Добавление комментариев на сайт с Django

I read that Post and got it fine and informative.https://aflife.ru/

Django - Урок 023. Like Dislike система с помощью GenericForeignKey

Хорошо. Большое спасибо. Посмотрю что из этого получится.
Сейчас обсуждают на форуме
o

Запрос на изменение БД с помощью оператора UPDATE и странное поведение QTableView

или запрос к базе так https://www.w3schools.com/sql/sql_ref_order_by.asp или сортировка в модели через прокси модель https://doc.qt.io/qt-5/qsortfilterproxymodel.html
o

Как очичтисть очередь событий для конпки

нужно сделать связку qml и c++, тяжелые задачи отправляются на обработку в с++, в qml остаются только быстрые. и у кнопок есть свойство enabled: true\false при запуске\остановке з…
A

Развертывание QML приложения

Полностью согласен, что пример не удачный, но я так как раз попытался выразить то, что вы далее описали с примером со скадой, часть .dll и часть .qml с интерпритацией. И в Вашем ответе я ув…
АБ

Sorting the added QML elements in the ListModel

I am writing an alarm clock in QML, I am required to sort the alarms in ascending order (depending on the date or time (if there are several alarms on the same day). I've done the sorting …
EK

HTTP server на Qt

Давно было, уже не помню как, но разрулил. Спасибо :)
О нас
Услуги
© EVILEG 2015-2022
Рекомендует хостинг TIMEWEB