Оформление, скины и расположение датчиков

Пока хобдрайв в довольно ограниченном виде позволяет настраивать внешний вид.


Поддерживается только настройка внешнего вида датчиков.


В следующих версиях планируется:
- Возможность создания экранов с собственным набором датчиков
- Возможность замены неиспользуемых датчиков на обычных экранов на более полезное.
- Возможность расположения нескольких схожих датчиков в одной позиции на экране (с удобным выбором текущего отображаемого датчика). Например Средняя скорость и средняя скорость без учета простоев будут в одном месте.



Хорошая новость состоит в том, что внешний вид и расположение датчиков уже сейчас можно настраивать как вам хочется. Но для этого нужно не бояться редактировать файлы настроек (XML).



файлы *.layout

Описывают доступные секции (экраны) и сенсоры на них. Вы можете определять свои секции в файле user.layout

<section name="General" fixed="true" if="SensorName">
  <grid rows="25,,30" cols="30,,30">
    <item id="FuelLevel" precision="1"/>
    <item id="FuelEconomy_trip" size='large'/>
    <item id="BatteryVoltage" size='medium' period='5000'/>
  </grid>
</section>

Пример выше определяет секцию 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).
При растягивании по вертикали, в последующих рядах необходимо дописывать пустой <item/> там где rowspan перекрывает ячейки.



Идентификаторы основных доступных датчиков можно посмотреть на вкладке "Все сенсоры".

Как редактировать

Файлы default-tripcomp.layout, default.gauge будут перетираться каждый раз при обновлении программы.
Поэтому все изменения нужно делать в файлах user.layout, user.gauge.
В 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/


Использование картинок

Изображения в оформлении

Примеры


1. Чтобы заменить какой-нибудь ненужный вам сенсор на текущее время, нужно в файле default-tripcomp.layout найти нужную секцию section, скопировать ее в файл user.layout, и вместо

<item id="AirTemp" period='10000'/>

написать

<item id="DateTime" custom-units="timesec" units="none"/>

Обсуждение и запросы на изменение раскладок

На форуме: http://hobdrive.com/forum/viewtopic.php?f=12&t=133

This article was helpful for 19 people. Is this article helpful for you?