хобдрайв в довольно ограниченном виде позволяет настраивать внешний вид.
Поддерживается настройка внешнего вида датчиков и возможность создания экранов с собственным набором датчиков
Но внешний вид и расположение датчиков уже сейчас можно настраивать как вам хочется. Но для этого нужно не бояться редактировать файлы настроек (XML).
Описывают доступные секции (экраны) и сенсоры на них. Вы можете определять свои секции в файле user.layout
Пример выше определяет секцию 3 на 3 (параметры rows и cols задают количество строк/столбцов и процентное соотношение их размеров).
fixed=”true” означает, что экран всегда видим: до него можно добаться перелистываниями или нажатием на полосу быстрой навигации. Значение false поместит экран в дополнительный раздел - его можно будет вызвать из меню экранов.
if=”SensorName” означает, что секция активна и есть в списке, только если хобдрайв видит загруженный датчик с именем “SensorName”. Датчик может не работать, но только наличие его уже включит экран! Это можно использовать для создания специфичных для моделей ЭБУ экранов. Содержимое if является интерпретируемым значением, т.е. в нем может присутствовать блок ${} и задавать более сложные условия. В качестве проверочного содержимого могут быть еще значения:
LandscapeLayout - секция загрузится только в альбомной ориентации. PortraitLayout - секция загрузится только в портретной ориентации.
True - Секция загрузится (используется с интерпретируемыми выражениями)
Каждый экран описывается корневой раскладкой, обычно это grid (но есть и другие).
Grid - это сетка, таблица. Она задается столбцами и колонками. Их число определяется атрибутами rows и cols. В них через запятую указываются процентные размеры каждой строки и столбца соответственно. Размер можно пропустить, оставив только запятые. Тогда хобдрайв присвоит столбцам/колонкам без размеров одинаковые размеры.
Каждый item в сетке - это отдельный виджет, клетка отображения, обычно базирующийся на сенсоре.
Атрибуты элементов позволяют модифицировать поведение и внешний вид каждого элемента. Атрибутов очень много, некоторые из них:
precision: число знаков после запятой в отображаемом значении датчика.
size: размер значения датчика. Либо число (размер шрифта в поинтах), либо small, normal, large, huge, giant.
period: интервал обновления датчика в миллисекундах.
rowspan, colspan: атрибуты позволяют растянуть датчик на несколько соседних мест по горизонтали (colspan), или по вертикали (rowspan).
При растягивании по вертикали, в последующих рядах необходимо дописывать пустой
Идентификаторы основных доступных датчиков можно посмотреть на вкладке “Все сенсоры”.
Файлы default-tripcomp.layout, default.gauge будут перетираться каждый раз при обновлении программы. Поэтому все изменения нужно делать в файлах user.layout, user.gauge. В user.layout можно перенести интересующий вас экран и изменять его уже там.
В этой статье показано как можно добраться до файлов программы и как их редактировать:
https://hobdrive.userecho.com/knowledge-bases/4/articles/242-kak-perenesti-vse-nastrojki-ili-sdelat-bekap
Для изменения существующих экранов, вы можете взять готовые базовые экраны, и изменить их, скопировав в файл user.layout.
<item id="FuelLevel" onclick="Minimize"/>
Описывает действие при тапе на датчик FuelLevel.
<item type="button" text="Min" action="Minimize"/>
Описывает кнопку с текстом Min, при нажатии на нее - выполнится действие Minimize.
<item id="Speed" actions="SetupOdometer, Minimize, Shutdown"/>
Описывает список действий, соответствующие им кнопки появятся в окне детальной информации по сенсору (открывается по долгому тапу).
"ChangeLiterCost" - диалог стоимости литра топлива
"FuelCalibration" - диалог настройки объема бака
"SensorInformation" - диалог с информацией по сенсору
"NewFueling" - диалог ввода новой заправки
"NewMaintenance" - диалог ввода записи по обслуживанию
"Minimize" - скрыть
"Shutdown" - выход
"VehicleSettings" - настройки автомобиля
"PortSettings" - настройки соединения
"ExtraSettings" - системные настройки
"EditSensorsLayout" - вход в режим редактирования сенсоров
"CorrectionInformation" - информация по коррекции расхода с учетом торможения двигателем.
"go(General)" - переход на экран с указанным именем
"run(winamp trololo.mp3)" - запуск указанного приложения с командной строкой. На андроид системе - запуск указанного глобального действия (intent).
Помимо “onclick” доступны также атрибуты “ondoubleclick” и “onhold” - соответственно действие при двойном клике, и при долгом нажатии.
Декораторы это дополнительные обертки видоизменяющие поведение и отображения базового виджета. Существуют следующие виды декораторов: image : Наложенная на виджет картинка.
padding : Обрамление содержимого (отступы).
tile : Фоновая подложка.
touch-progress : Динамическая полоса, активирующая определенное действие.
Декораторы активируются через произвольный идентификатор. Порядок наложения декораторов важен. он определяет “матрешку” где каждый слой добавляет свои свойства.
Порядок наложения определяется алфавитным упорядочиванием идентификаторов декораторов.
Например, для определения пары декораторов d1picture и d2pad используются следующие атрибуты:
<item id="Sensor" decorator-d1picture="image" decorator-d2pad="padding" d1picture-image-path="mypic.png" d2pad-padding="10 0 10 0"/>
При этом первым применяется декоратор картинки, второй - отступы. В результате фоновая картинка mypic.png займет все содержимое клетки, а содержимое виджета будет рисоваться со смещением сверху и снизу в 10 логических пикселей.
Использование динамических выражений
https://hobdrive.userecho.com/topic/783218-dinamicheskie-vyirazheniya-v-fajlah-nastroek/
Для отображения в теле виджета картинки, можно использовать несколько приемов.
путь задается относительно папки images внутри папки hobdrive.
Используются декораторы, при этом количество накладываемых картинок неограничено: Код файл gauge:
Код файл layout:
decorator-произвольныйпрефикс=”image” заставляет использовать “произвольныйпрефикс”, в примере выше это “action” как картинку (image).
Эта картинка определяется атрибутами, начинающимися с этого префикса:
image-path - путь к файлу с картинкой. Прозрачность поддерживается только для png. Заметьте, как в определении пути используется переменная “$theme-brightness” - она заставляет в зависимости от текущей темы брать либо темную, либо светлую иконку. image-zorder - top или bottom - рисовать картинку “за” или “перед” данными датчика. image-scale - на сколько масштабировать картинку относительно размера виджета. image-align - выравнивание картинки: значения top, bottom, left, right, vcenter, hcenter, center. image-aspect - Если true, то пропорции картинки будут сохранены. Если false, то картинка растянется в соответствии с габаритами виджета.
image-rotate - угол на который нужно повернуть картинку, в градусах.
image-rotate-align - точка вокруг которой вращается картинка. Значения как в image-align.
Атрибуты image-path и image-rotage являются динамическими. В них можно вставить динамическое вычисляемое выражение. От обычного выражения оно отличается тем что вычисляется при каждой отрисовке картинки, оно начинается с двух знаков доллара.
Например:
decorator-i2=”image” i2-image-zorder=”bottom” i2-image-path=’images/gauges/rpms/$${ceiling(Sensor_Value/10002)}.png’ i2-image-align=”hcenter,bottom” i2-image-scale=”0.8” Здесь вычисляемое значение - “ceiling(Sensor_Value/10002)”
Оно означает что нужно взять текущее значение датчика (RPM в указанном примере), поделить его на 1000, умножить на 2 и округлить до верхнего целого числа.
После вычисления получается путь к файлу, например
images/gauges/rpms/2.png
Здесь используется три декоратора. Один фоновый, второй - стрелка с заданным вращением, зависящим от показания датчика, и третий - декоративная заглушка в основании стрелки. В результате получается:
