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;
我在 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;