searchbuild议使用SUGGEST_COLUMN_ICON_1的url

我有一个SearchManager设置,在用户input时会显示build议下拉菜单。 结果来自我的服务器(http)。 我想显示每个选项的图标(如果文件实际上存在)。

看看文档,我看到了常量列SUGGEST_COLUMN_ICON_1选项允许这些选项:

 Column name for suggestions cursor. Optional. If your cursor includes this column, then all suggestions will be provided in a format that includes space for two small icons, one at the left and one at the right of each suggestion. The data in the column must be a resource ID of a drawable, or a URI in one of the following formats: content (SCHEME_CONTENT) android.resource (SCHEME_ANDROID_RESOURCE) file (SCHEME_FILE) 

我只有一个URL。 哪个选项最适合我?

这里是我正在做的这个类:

 public class MyCustomSuggestionProvider extends SearchRecentSuggestionsProvider { public static final String AUTHORITY = "---.MyCustomSuggestionProvider"; public static final int MODE = DATABASE_MODE_QUERIES; private final static String[] COLUMN_NAMES = {BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1, SearchManager.SUGGEST_COLUMN_TEXT_2, SearchManager.SUGGEST_COLUMN_QUERY, SearchManager.SUGGEST_COLUMN_INTENT_DATA, SearchManager.SUGGEST_COLUMN_INTENT_EXTRA_DATA, SearchManager.SUGGEST_COLUMN_ICON_1, SearchManager.SUGGEST_COLUMN_INTENT_ACTION}; public MyCustomSuggestionProvider() { setupSuggestions(AUTHORITY, MODE); } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor recentCursor = super.query(uri, projection, selection, selectionArgs, sortOrder); String query = selectionArgs[0]; if (query == null || query.length() < 3) { return recentCursor; } final MatrixCursor customCursor = new MatrixCursor(COLUMN_NAMES); // Get web results from Retrofit Library List<TheProfile> suggestions = RestClient.get().getCustomSearch(query, MyApp.getUserId()); for (TheProfile suggestion : suggestions) { Uri searchIconUri = Uri.parse("http:/---/profile_images/" + String.valueOf(suggestion.id) + ".png"); try { customCursor.addRow(new Object[]{ suggestion.id, suggestion.profile, suggestion.subcategory, suggestion.profile, suggestion.profile, suggestion.subcategory, searchIconUri, "android.intent.action.SEARCH"}); } catch (Exception e) { e.printStackTrace(); } } return customCursor; } } 

Solutions Collecting From Web of "searchbuild议使用SUGGEST_COLUMN_ICON_1的url"

对于那些仍在寻找这个问题的答案,就像我一样。 这和我的代码非常相似,所以我决定分享它。 我花了几个小时把这一切放在一起。 也许,我会为别人节省一些时间。 首先,你需要Glide库 。

将它添加到你的应用程序的build.gradle文件中:

 repositories { mavenCentral() // jcenter() works as well because it pulls from Maven Central } dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' compile 'com.android.support:support-v4:19.1.0' } 

现在让我们对问题中的代码进行一些修改(在MyCustomSuggestionProvider类中):把它放在你的for (TheProfile suggestion : suggestions) {

 FutureTarget<File> futureTarget = Glide .with(getContext().getApplicationContext()) .load(searchIcon) .downloadOnly(Target.SIZE_ORIGINAL, Target.SIZE_ORIGINAL); File cacheFile = futureTarget.get(); Uri searchIconUri = Uri.fromFile(cacheFile); 

注意下面这行代码: .with(getContext().getApplicationContext())获取应用程序上下文非常重要,不仅仅是上下文,因为我们不打算在ImageView中显示bmp。 这种Glide用法的官方Glide文档 。

毕竟你可以打电话给:

 // do things with bitmap and then release when finished: Glide.clear(futureTarget); 
  1. 收集您要用作图标的所有文件。 他们可能在你的服务器上; 你需要将它们embedded到你的应用程序中。

  2. 如果它们不是.PNG格式,则将它们转换为.PNG格式。 将它们缩放到您在应用中显示的大小。

  3. 将它们添加到/ res / drawable-mdpi文件夹中的Android项目中。 将它们放在特定于mdpi的文件夹中将按不同的设备分辨率以相同大小进行缩放。

  4. 图标代码的第一部分是为SearchManager返回URI。 使用以下格式的“android.resource”scheme:

     android.resource://<package-name>/<resource-type>/<resource-name> 

    例如,你可以为每个图标创build一个final URI 。 这里是我在我的项目中用于/res/drawable-mdpi/ic_autocomplete_1.png的URI的一个例子:

     private final Uri searchIconUri = Uri.parse("android.resource://com.mycompany.android/drawable/ic_autocomplete_1"); 
  5. 在循环访问您的build议时,请确定哪个图标是必需的,例如使用switch语句,并将该URI放入行对象中,就像您在代码中一样。