Пользовательский стиль элемента списка Firemonkey не выделяется при нажатии на Android и iOS
Я создаю мультиплатформу ( iOS, Android, OSX, Windows APP) в Firemonkey. Одна из вещей, которые я пытаюсь сделать, - это создать пользовательский элемент списка (с большим количеством элементов данных), который будет работать на всех этих платформах: даст вам возможность выбирать элементы, отображаться правильно. Согласно проведенному мною исследованию, вероятно, лучший способ для этого - создать собственный стиль для элемента списка и определить там элементы данных. Это то, что я сделал. Я создаю элементы из набора данных клиента в этой процедуре:
procedure TMasterDetailForm.LoadAvailable;
var i: Integer;
Item: TListBoxItem;
begin
lstAvailable.Clear;
//Add Header
lstAvailable.BeginUpdate;
Item := TListBoxItem.Create( lstAvailable );
Item.Parent := lstAvailable;
Item.Height := 70;
//Item.OnApplyStyleLookup := ListItemApplyStyleLookupHandler;
Item.StyleLookup := AvailableListHeaderStyle;
//Add Details
cdsAvailable.First;
for I := 1 to cdsAvailable.RecordCount do
begin
Item := TListBoxItem.Create( lstAvailable );
Item.Parent := lstAvailable;
Item.Height := 50;
//Item.Selectable := True;
//Item.OnApplyStyleLookup := ListItemApplyStyleLookupHandler;
Item.StyleLookup := AvailableListItemStyle;
//Item.StyleLookup := 'ListboxItem1Style1';
Item.StylesData[ txtWoNum ] := cdsAvailable.FieldByName( 'work package' ).AsString;
Item.StylesData[ txtAircraft ] := cdsAvailable.FieldByName('aircraft').AsString;
Item.StylesData[ txtTaskDescription ] := cdsAvailable.FieldByName('task').AsString;
cdsAvailable.Next;
end;
lstAvailable.EndUpdate;
end;
Все оформлено должным образом на всех платформах, за исключением того, что нажатие (нажатие) на ListBoxItem на Android или iOS не выделяет ListBoxItem. Если я отменяю стиль, то выбор элементов также работает. Я не могу понять, как это исправить. Между прочим, событие onclick в ListBox, кажется, работает должным образом (изменения itemindex).
Любой вклад будет принята с благодарностью.
Редактирование ( 12.12.2014): я попытался упростить пример, добавив элементы вручную в редакторе ListBox и отбросив здесь этот код, и обнаружил, что анимация для выбора элемента списка изменяется. Итак, я настроил элемент списка и изменил только TextColor на синий. Во время выполнения на Android, когда вы выбираете элемент списка, он просто меняет цвет текста на черный вместо того, чтобы рисовать всю строку. Есть идеи, как сделать так, чтобы listbox вел себя так же, как если бы к нему не был прикреплен стиль?
1 ответ
Извини я плохо знаю английский.
У меня есть решение (проверено в XE7):
- Открыть форму
- Измените стиль IDE на "iOS"
- Выберите TListBox, откройте контекстное меню и выберите "Редактировать стиль по умолчанию": StyleBook2 создан.
- Добавьте компонент TRectangle в стиле "listboxstyle/background" с именем "selection". Это магия!
Теперь Firemonkey нашел компонент "selection" и работает отлично!
Если у вас уже есть компонент StyleBook2 до этих шагов, вам может потребоваться удалить его, будьте осторожны!