TSearchBox перед TListBoxItem в Android с Delphi XE8

У меня есть проект Firemonkey с несколькими устройствами в Delphi XE8, где я добавил TSearchBox в свой TListBox. Только на Android SearchBox помещается перед моим TListBoxItems. В Windows и iOS он отображает окно поиска над всеми lisboxitems и всегда остается сверху, даже если вы прокручиваете вниз.

Я использую Nexus 7 с Android 5.1.1.

На изображении ниже вы можете видеть окно поиска перед верхним элементом списка: SearchBox добавлено в fmx

Как я могу получить это с Android?

ОБНОВЛЕНИЕ

Я создал панель инструментов над своим TListBox и добавил в нее searchBox во время выполнения. Таким образом, searchBox всегда находится над элементами, но я не могу искать в listBox. Как настроить его для проверки текста ListBoxItems?

ОБНОВЛЕНИЕ 2

Я сделал новый тестовый проект, и он, кажется, работает правильно в этом проекте. Теперь я немного протестировал собственный стиль, который использую, и это, похоже, проблема. Единственная проблема заключается в том, что я использую книгу стилей для установки всех стилей в моем проекте, и я не знаю, как исключить из этого ListBox и его элементы.

ОБНОВЛЕНИЕ 3

Я удалил стили listbox и listboxitem из файла .style, который использую в своей книге стилей. Это решило проблему. Единственная проблема, с которой я столкнулся, заключается в том, что отображается текст TListBoxItem. Я создаю пользовательские элементы списка с метками, чтобы выровнять их определенным образом, как я хочу, как вы можете видеть на рисунке ниже. Но для того, чтобы иметь возможность искать элементы, мне нужно установить текст элементов. Таким образом, текст отображается над метками, которые я установил в элементе.

Есть ли способ сделать текст listboxitem невидимым? Я уже пытался изменить цвет на тот же цвет, что и фон, но это не работает, а также установить размер шрифта на 0, и это тоже не работает.


person Remi    schedule 18.06.2015    source источник
comment
Вы можете показать файл DFM?   -  person Zam    schedule 18.06.2015
comment
вы создаете TSearchBox во время выполнения?   -  person Zam    schedule 18.06.2015
comment
@Zam Я пытался создать его во время выполнения, а также пытался добавить его в fmx   -  person Remi    schedule 18.06.2015
comment
вы пробовали мой образец?   -  person Zam    schedule 18.06.2015
comment
@Zam Да, я сделал то же самое. Но все еще не работает.   -  person Remi    schedule 18.06.2015
comment
вы можете создать новый пустой проект и протестировать только эту функциональность?   -  person Zam    schedule 18.06.2015
comment
@Zam Я попробую. У меня не будет времени до следующей недели, так что дайте знать, когда я попробую.   -  person Remi    schedule 19.06.2015
comment
@Zam, проверь мой обновленный ответ!   -  person Remi    schedule 25.06.2015
comment
извините, я еще не знаком с TStyleBook. Это следующее, чему я хочу научиться   -  person Zam    schedule 25.06.2015
comment
@Zam, я снова обновил свой ответ. Надеюсь, вы можете помочь!   -  person Remi    schedule 25.06.2015
comment
Что касается установки невидимого списка listboxitemtext, я бы предложил использовать свойство TagString вместо свойства Text.   -  person Dsm    schedule 25.06.2015
comment
@Dsm я пытался использовать свойство TagString, но когда я ищу с помощью TSearchBox, он не проходит через этот текст   -  person Remi    schedule 01.07.2015
comment
Ну нет не будет. TSearchBox не предназначен для этого. Вам нужно будет реализовать свой собственный поиск, который сравнивает текст поиска с TagString каждого элемента. Если вы хотите использовать поле TSearch, вам нужно будет сделать что-то вроде создания дубликата оригинала, но с текстами поиска - и создание собственного поиска, вероятно, будет проще и надежнее.   -  person Dsm    schedule 01.07.2015


Ответы (3)


не могу воспроизвести. на винде и на андроиде (5.0.2) все выглядит одинаково. скомпилирован с помощью Delphi XE7 Update 1.

мой файл pas:

procedure TForm1.FormCreate(Sender: TObject);
var
  X: TSearchBox;
  I: Integer;
begin
  x := TSearchBox.Create(ListBox1);
  x.Parent := ListBox1;

  for I := 1 to 100 do
    ListBox1.Items.Add('line xxxxxx  yyy');
end;

введите здесь описание изображения

введите здесь описание изображения

person Zam    schedule 18.06.2015
comment
Если вы читали обновления, то должны были знать, что я уже решил визуальную проблему. Единственная проблема, с которой я теперь столкнулся, заключается в том, как искать пользовательские метки, которые я помещаю в ListboxItems, или как сделать текст listboxItem невидимым. - person Remi; 03.07.2015

Я создал свой собственный метод поиска для поиска моих listBoxItems.

Сначала я дал моему listBoxItems свойство tagString с текстом, который я хочу иметь возможность искать. Я использую tagString, потому что он не виден.

Во-вторых, я добавил окно поиска над своим TListBox. Затем добавьте событие keyUp в searchBox. Это вызывает мой собственный метод поиска, которому нужен только текст String из поля поиска.

Код ниже — мой пользовательский метод поиска:

procedure TfrmNocoreDKS.SearchList(text: String);
var
  listItem: TListBoxItem;
  i: Integer;
begin
  CreateList;//Creates all the items in the TListBox
  if not text.isempty then
  begin
    with myListBox do
    begin
      for i := -1 + myListBox.Count downto 0 do
      begin
        listItem := myListBox.ListItems[i];
        if not listItem.TagString.Contains(text) then
        begin
          Items.Delete(i);
        end;
      end;
    end;
  end;
end;
person Remi    schedule 22.07.2015
comment
Спасибо, Реми, это действительно полезно. Как вы думаете, было бы хорошей идеей использовать метод «CompareText» с параметром «text» и свойством «listItem.Text»? - person André Murta; 20.11.2016
comment
Ну, на самом деле, возможно, вам следует использовать AnsiConatainsText. CompareText даст вам True только в том случае, если текст тот же. С помощью функции поиска вы также хотите искать части текста, а также не учитывать регистр - person Remi; 22.11.2016

Я подозреваю, что в какой-то момент вы изменили представление Android вместо основного представления. Вам нужно будет вернуться к представлению Android. Я считаю, что в XE8 есть возможность вернуться к основному виду оттуда, но у меня нет XE8, поэтому я не могу проверить. В противном случае просто переместите TSearchBox туда, куда вы хотите.

person Dsm    schedule 18.06.2015
comment
Я пытался поместить TSearchBox над TListBox, но как настроить его для проверки текста TListBoxItems? Потому что вы не можете установить TListBox в качестве родителя, иначе он снова попадет в TListBox, и у вас будет та же проблема. - person Remi; 25.06.2015