При разработке мобильных приложений на платформе 1С:Предприятие 8.3, особенно для Android-устройств в режиме "Такси", разработчики часто сталкиваются с проблемой некорректного центрирования элементов управления на формах. Несмотря на то, что в конфигураторе форма может отображаться с идеально отцентрированными кнопками и другими элементами, в пользовательском режиме на мобильном устройстве они могут сдвигаться влево. Рассмотрим эту проблему подробнее и выясним, какие подходы и решения мы можем применить.
Основная сложность, с которой мы сталкиваемся, заключается в расхождении между визуальным представлением формы в конфигураторе и ее реальным поведением на мобильном клиенте. Автор темы отмечает, что даже при использовании очевидных свойств для центрирования, таких как ГоризонтальноеПоложениеПодчиненных, желаемый результат не достигается. Это может быть вызвано несколькими факторами:
Платформа 1С предоставляет ряд свойств для управления горизонтальным расположением элементов. Разберем их и уточним, как их правильно использовать.
Свойство группы ГоризонтальноеПоложениеПодчиненных:
Это основное свойство, которое мы должны применять для центрирования группы элементов. Установив его значение в "Центр", мы ожидаем, что все дочерние элементы будут выровнены по центру своей группы. Для этого:
Группировка в "Горизонтальная" или "ГоризонтальнаяАвто".ГоризонтальноеПоложениеПодчиненных в "Центр".Важный нюанс: Убедитесь, что у самой группы отсутствует жестко заданная ширина или она растягивается по горизонтали, чтобы иметь достаточно пространства для центрирования. Если группа слишком узкая, центрирование может быть незаметным или неэффективным.
Свойство элемента РастягиватьПоГоризонтали:
Это свойство часто упоминается в контексте центрирования, но мы должны использовать его с осторожностью. Если мы включаем эту галку для кнопки, кнопка будет занимать всю доступную ширину в своей группе. В этом случае, говорить о центрировании самой кнопки становится бессмысленным, так как она уже занимает все пространство.
Для центрирования группы кнопок, сами кнопки внутри этой группы, как правило, не должны быть растянуты по горизонтали. Если же нам нужно, чтобы кнопка занимала всю ширину и при этом была единственным элементом в строке, тогда это свойство будет уместно.
Правильное использование свойств в иерархии:
Один из важных моментов, на который мы должны обратить внимание, это рекомендация устанавливать свойство ГоризонтальноеПоложениеПодчиненных в "Центр" только для родительской группы, которая содержит центрируемые элементы. Для остальных элементов (особенно для элементов внутри центрируемой группы), мы должны оставить свойство расположения в значении "Авто". Переопределение этого свойства у каждого элемента может привести к конфликтам и некорректному отображению.
Проверяем:
ГоризонтальноеПоложениеПодчиненных установлено в "Центр".РастягиватьПоГоризонтали выключено.Когда стандартные методы не приносят желаемого результата, особенно на мобильных платформах, мы можем рассмотреть менее элегантные, но иногда эффективные обходные пути.
Этот метод, хоть и считается "диким" и не масштабируемым в современной разработке, исторически часто использовался и, как мы видим из обсуждения, даже присутствует в типовых конфигурациях (например, РабочееМестоРаботникаСклада). Суть метода заключается в следующем:
Мы размещаем по бокам от центрируемого элемента управления (например, кнопки) декорации. Эти декорации могут быть:
Затем мы вручную или программно регулируем ширину этих декораций. Увеличивая ширину декорации слева от кнопки, мы "отодвигаем" кнопку вправо, создавая эффект центрирования. Для достижения симметричного центрирования нам нужно будет разместить аналогичную декорацию и справа, и выставить им одинаковую ширину. Это требует тщательной ручной настройки и не является адаптивным решением для разных размеров экранов.
Пример структуры (в группе с горизонтальной группировкой):
Группа (Группировка: Горизонтальная, ГоризонтальноеПоложениеПодчиненных: Авто)
ДекорацияОтступСлева (Вид: Обычная, Ширина: задать вручную или программно)
КнопкаДействия
ДекорацияОтступСправа (Вид: Обычная, Ширина: задать вручную или программно)
Такой подход чрезвычайно трудоемок для форм с большим количеством элементов (как у автора темы, более 50 кнопок) и практически не масштабируем.
Когда стандартные свойства не срабатывают, мы можем попытаться управлять расположением элементов программно. Это более сложный путь, который может включать:
ПриСозданииНаСервере или ПриОткрытии), возможно, с учетом ориентации экрана.Хотя такой подход дает максимальный контроль, он значительно увеличивает сложность разработки и поддержки формы.
В некоторых случаях, если нам не нужно абсолютное центрирование, а скорее аккуратное выравнивание, мы можем просто задать всем кнопкам одинаковую фиксированную ширину. Это поможет создать более опрятный вид, но не решит проблему именно центрирования элементов относительно формы или группы.
Для этого в свойствах каждой кнопки мы устанавливаем свойство Ширина в одинаковое числовое значение.
Если после применения стандартных методов и их нюансов проблема центрирования на Android-устройствах все еще сохраняется, мы рекомендуем выполнить следующие действия:
Обновите платформу 1С:Предприятие: Разработчики платформы постоянно вносят исправления и улучшения. Возможно, в более свежих версиях платформы (например, 8.3.20 и выше) были решены проблемы с рендерингом управляемых форм на мобильных клиентах. Проверьте актуальные релизы и рассмотрите возможность обновления вашей платформы.
Тщательно анализируйте иерархию формы: Используйте окно "Элементы" в конфигураторе, чтобы детально изучить структуру вашей формы. Мы должны убедиться, что свойства центрирования (ГоризонтальноеПоложениеПодчиненных = Центр) установлены на правильной "родительской" группе, которая непосредственно содержит элементы, нуждающиеся в центрировании.
Помните, что свойства наследуются или применяются к непосредственным подчиненным элементам. Если кнопка находится в группе, а эта группа, в свою очередь, в другой группе, то свойство центрирования должно быть установлено на правильном уровне.
Избегайте жестко заданных ширин: По возможности, не устанавливайте фиксированную ширину ни для групп, ни для кнопок, если это не требуется для конкретного дизайна. Позвольте платформе самостоятельно распределять пространство, чтобы свойства центрирования работали корректнее.
Тестируйте на реальном устройстве: Всегда тестируйте форму на реальном Android-устройстве, так как эмуляторы или предварительный просмотр в конфигураторе могут не полностью воспроизводить поведение мобильного клиента.
Рассмотрите изменения в типовой конфигурации: Если ваша задача состоит в доработке типовой конфигурации (например, КА 2.4.13.103) и вы видите, что типовое решение использует декорации, то возможно, на момент создания этой конфигурации это был единственный надежный способ добиться нужного расположения. Если вы работаете в расширении, вам может потребоваться программно изменять свойства декораций или использовать другие динамические методы, чтобы обойти ограничения расширений на удаление элементов.
Проблема центрирования элементов в мобильном клиенте 1С является достаточно частой и, к сожалению, не всегда имеет простое и универсальное решение. Мы должны подходить к ней системно, комбинируя стандартные возможности платформы с глубоким пониманием ее поведения на различных устройствах.