Android 和 Delphi XE8 中 TListBoxItem 前面的 TSearchBox

TSearchBox in front of TListBoxItem in Android with Delphi XE8

我在 Delphi XE8 中有一个 firemonkey 多设备项目,我在其中添加了一个 TSearchBox 到我的 TListBox。只有在 Android 上,SearchBox 才放在我的 TListBoxItems 前面。 在 windows 和 iOS 上,它在所有 lisboxitems 上方显示搜索框,并且即使向下滚动也始终保持在顶部。

我正在使用带有 android 5.1.1

的 Nexus 7

在下图中,您可以看到顶部列表框项目前面的搜索框:

如何使用 android 获取此信息?

更新

我在 TListBox 上方创建了一个工具栏,并在运行时向其中添加了一个搜索框。这样搜索框总是在项目上方,但我无法在列表框中搜索。我如何设置它来检查 ListBoxItems 的文本?

更新 2

我做了一个新的测试项目,它似乎在那个项目中工作正常。现在我对我使用的自定义样式进行了一些测试,这似乎是问题所在。唯一的问题是我使用 Stylebook 来设置项目中的所有样式,但我不知道如何从中排除 ListBox 及其项。

更新 3

我已经从样本中使用的 .style 文件中删除了列表框和列表框项样式。这已经解决了问题。我现在唯一的问题是显示了 TListBoxItem 文本。我使用标签制作自定义列表框项目,以便按照我想要的方式对齐它们,如下图所示。但是为了能够通过项目进行搜索,我需要设置项目的文本。所以文本显示在我在项目中设置的标签上方。

有没有办法将listboxitem文本设置为不可见?我已经尝试将颜色更改为与背景相同的颜色,但这不起作用,并将字体大小设置为 0,这也不起作用。

无法重现。 Windows 和 Android (5.0.2) 上的一切看起来都一样。 使用 Delphi XE7 更新 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;

我怀疑您在某些时候修改了 Android 视图而不是主视图。您将需要切换回 Android 视图。我相信 XE8 可以从那里恢复到主视图,但我没有 XE8,所以无法测试。否则只需将 TSearchBox 移动到您想要的位置即可。

我已经创建了自己的搜索方法来搜索我的 listBoxItems。

首先,我为我的 listBoxItems 提供了一个 tagString 属性,其中包含我希望能够搜索的文本。我使用 tagString 因为它不可见。

其次,我在我的 TListBox 上方添加了一个搜索框。然后向搜索框添加一个 keyUp 事件。这将调用我的自定义搜索方法,该方法只需要搜索框中的字符串文本。

下面的代码是我的自定义搜索方法:

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;