我在Delphi XE8中有一个firemonkey多设备项目,我在其中添加了一个TSearchBox到我的TListBox。仅在Android上,SearchBox位于我的TListBoxItems前面。 在Windows和iOS上,它会在所有lisboxitems上方显示搜索框,即使向下滚动也始终保持在顶部。
我正在使用带有Android 5.1.1的Nexus 7
在下面的图片中,您可以看到顶部listboxitem前面的搜索框:
我如何用android获得这个?
更新
我在TListBox上面创建了一个工具栏,并在运行时添加了一个searchBox。这样,searchBox始终位于Items之上,但我无法在listBox中搜索。如何设置它以检查ListBoxItems的文本?
更新2
我已经制作了一个新的测试项目,似乎在该项目中正常工作。现在我用我使用的自定义样式进行了一些测试,这似乎是问题所在。唯一的问题是我使用Stylebook来设置项目中的所有样式,我不知道如何从中排除ListBox及其项目。
更新3
我已经从我在StyleBook中使用的.style文件中删除了listbox和listboxitem样式。这解决了这个问题。我现在唯一的问题是显示TListBoxItem文本。我使用标签制作自定义listboxitems,以便按照我们想要的方式对齐它们,如下图所示。但是为了能够搜索我需要设置项目文本的项目。因此,文本显示在我在项目中设置的标签上方。
有没有办法将listboxitem文本设置为不可见?我已经尝试将颜色更改为与背景相同的颜色,但这不起作用,也将字体大小设置为0,这也不起作用。
答案 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;
答案 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移动到您想要的位置即可。