使用搜索对话框时,我已成功实施自定义搜索建议。然而,目前每个建议项都只是文本。我想在左侧添加一个图标。但是问题是我在本地没有这些图片,而是可以通过 URL 访问它们。我无法在文档(构建建议表)中找到如何将 URL 而不是 Uri 发送到 SUGGEST_COLUMN_ICON_1 下的本地文件。
3 回答
所以这是可能的,但它非常笨拙而且有点hacky。您必须创建一个 ContentProvider 来提供应用程序内部缓存目录中的图像(请参阅我的答案https://stackoverflow.com/a/15667914/473201)。
然后,由于您的文件 ContentProvider 将在主 UI 线程上访问,因此您无法在那里下载图像。您必须下载搜索建议 ContentProvider 的 query() 函数中的所有图像。如果您将它们放在应用程序的内部缓存目录中,则 ContentProvider 文件可以在 SearchView 请求它们时返回它们。
就像是:
class ImagesProvider extends ContentProvider {
...
// stuff from https://stackoverflow.com/a/15667914/473201
...
}
然后在您的搜索 ContentProvider 中:
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
// create a cursor table of results
MatrixCursor mc = new MatrixCursor(columns);
for (SearchResult res : results) {
String filename = res.getId();
ImagesProvider.downloadAndSaveFile(filename, res.getPictureUrl());
mc.addRow(new Object[] {
res.getId(),
res.getName(),
ContentUris.withAppendedId(ImagesProvider.CONTENT_URI, filename)
});
}
return mc;
}
我知道这是一个老问题,但 StackOverflow 关于该主题的帖子似乎很少。
我花了很多时间(约 5 小时)尝试让搜索使用自定义布局(希望结果是全屏并按类别分段,这是一个非常自定义的布局)并使用android 文档中描述的方法在这个主题上,但是在使用 SearchWidget 时从未创建过我的 SearchActivity(具有其定义的自定义布局),因为 Android 系统直接调用我的 Content Provider 的查询方法并将结果显示在一个丑陋的下拉列表中。我最终推出了自己的自定义搜索,花了大约 1 个小时,所以简短的回答是,推出你自己的。
我发现这是不可能的,只要你想使用默认的 Android 搜索功能。如果您知道其他情况,请发表评论。