使用Delphi XE8在Android中的TListBoxItem前面的TSearchBox

时间:2015-06-18 07:34:52

标签: android delphi firemonkey search-box delphi-xe8

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

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

在下面的图片中,您可以看到顶部listboxitem前面的搜索框: SearchBox added in fmx

我如何用android获得这个?

更新

我在TListBox上面创建了一个工具栏,并在运行时添加了一个searchBox。这样,searchBox始终位于Items之上,但我无法在listBox中搜索。如何设置它以检查ListBoxItems的文本?

更新2

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

更新3

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

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

3 个答案:

答案 0 :(得分: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;

enter image description here

enter image description here

答案 1 :(得分:1)

我已经创建了自己的搜索方法来搜索我的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;

答案 2 :(得分:0)

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