Почему элементы управления не охватывают несколько столбцов или строк в приложении Android FireMonkey?
У меня есть приложение FireMonkey с GridPanelLayout, выровненным по клиенту. У него есть 6 столбцов и 16 строк. Элементы управления включают глифы, правки и кнопки. TEdits охватывают несколько столбцов, а TButtons охватывают как несколько столбцов, так и строки. В настоящее время все элементы управления выровнены с клиентом.
Когда я компилирую и запускаю на Windows, все выглядит и работает как ожидалось. Однако на устройствах Android (я пробовал два, Android 6.0.1 и Amazon FireOS) ни один из элементов управления не охватывает более одного столбца или строки. У каждого из них всего одна клетка. Вместо охвата 6 столбцов TEdits занимает всего 1 столбец; вместо того, чтобы охватывать 2 столбца и 2 строки, кнопки TB также охватывают 1 столбец и 1 строку.
Почему элементы управления не занимают несколько столбцов или строк на Android?
1 ответ
И VCL, и FireMonkey не могут сохранить ControlCollection
из TGridPanel
/ TGridPanelLayout
правильно, когда фрейм / форма получает подклассы или фрейм помещается в другой фрейм / форму.
Эта ошибка относится как к VCL, так и к FMX. Это было сообщено старому КК еще в 2011 году, но никогда не было исправлено (примеры: # 92298, # 123225).
Пример: бросить TGridPanelLayout
с TButton
в этом на TFrame
:
object GridPanelLayout1: TGridPanelLayout
(...)
ControlCollection = <
item
Column = 0
ColumnSpan = 2
Control = Button1
Row = 0
RowSpan = 2
end>
object Button1: TButton
Align = Client
Size.Width = 421.000000000000000000
Size.Height = 257.000000000000000000
Size.PlatformDefault = False
TabOrder = 0
Text = 'Button1'
end
end
При последующем создании подкласса фрейма в среде IDE сохраняется много избыточных свойств для компонентов, унаследованных от базового класса. Обычно после первого нажатия F9 ColumnSpan
а также RowSpan
свойства удаляются без причины. На подклассе это выглядит примерно так:
inherited GridPanelLayout1: TGridPanelLayout
(...)
ControlCollection = <
item
Column = 0
Control = Button1
Row = 0
end>
inherited Button1: TButton
Size.Width = 210.500000000000000000
Size.Height = 128.500000000000000000
end
end
Обратите внимание, как изменилось свойство Size. Так же ControlCollection
элементы переопределены, но ColumnSpan
а также RowSpan
свойства отсутствуют полностью. Это причина.
Эта ошибка относится к вам, потому что в FMX специализированные представления для конкретных платформ реализованы как подклассы основного представления.
Система контроля версий помогает обнаруживать, когда избыточные свойства проникают в файлы DFM. В приведенном выше примере законно полностью удалить inherited GridPanelLayout1
блокировать, когда ваш подкласс не меняет его. Более того, я советую вам создать свой проект без открытого окна дизайнера форм, так как это часто приводит к повреждению файла DFM и повторному добавлению избыточных свойств при каждой возможности.