0

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

我正在使用带有 android 5.1.1 的 Nexus 7

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

我如何用android得到这个?

更新

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

更新 2

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

更新 3

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

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

4

3 回答 3

1

无法重现。在 Windows 和 Android (5.0.2) 上,一切看起来都一样。使用 Delphi XE7 Update 1 编译。

我的档案:

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;

在此处输入图像描述

在此处输入图像描述

于 2015-06-18T12:16:36.703 回答
1

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

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

其次,我在 TListBox 上方添加了一个搜索框。然后在 searchBox 中添加一个 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;
于 2015-07-22T09:38:46.360 回答
0

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

于 2015-06-18T13:07:43.797 回答