有没有办法在本地android(Java)中动态加载Material Icons?

最近,我能够通过使用Material Design Icons在Flutter中动态加载flutter_icons/flutter_icons.dart

// First Approach
Icon icon = new Icon(Icons.settings);

// Second Approach
icon = new Icon(MaterialIcons.getIconData(Model.dynamic_icon_name);

Flutter Screenshot

这让我开始思考是否可以使用本机android方法做类似的事情

// Glide Theoretical Example
Glide.with(context.getapplicationContext())
  .asBitmap()
  .load(MaterialIcons.getIconData(Model.dynamic_icon_name))
  .apply(new RequestOptions().fitCenter())
  .into(iconView);

我想知道这很有趣,因为我认为它可以提供一些优势,即开发人员无需将这些资产与应用捆绑在一起

iCMS 回答:有没有办法在本地android(Java)中动态加载Material Icons?

没有在 Android 上本地处理这个问题的有效方法,所以我最终采用的解决方案是让服务器托管这些图标,我可以像这样使用 Glide 来提供它们。

第 1 步:后端设置

  • 下载您选择的图标的 png 资源,即:此 Material Icons link 中的 thumbs_up 图标
  • 现在您可以继续将图像资产解压缩到服务器的资产文件夹中,在我的情况下,这是在服务器的公共文件夹中,因为我使用的是 Laravel 后端。最后,我的图标位于路径 public/material-icons/thumb_up_black.png 中,并确保保持一致的命名约定 public/material-icons/{icon_name_color}.png 这是至关重要的一点,因为我需要再次引用这些资源。
  • 现在我们可以将图标与相应的项目相关联

服务端


...

// Creating the item
new Item::create([
  'name' => 'Like-able item','icon' => 'thumb_up_black',]);

...

列出项目 API 端点结果

[
    {
        "name": "Like-able item","icon_url": "https//server-name.fancy/thumb_up_black.png"
    },{
        "name": "Like-able item #2",....
]

第 2 步:客户端设置(Android 应用)

  • 一旦我使用了 API 数据并即将显示项目,我就可以使用 Glide 来完成此操作。

ItemModel item = new ItemModel(itemDataFromServer);

Glide.with(context.getApplicationContext())
  .asBitmap()
  .load(MaterialIcons.getIconData(item.icon_url))
  .apply(new RequestOptions().fitCenter())
  .into(iconView);

这就是我最终解决这个问题的方法,这个实现的好处是,从我们的三个客户端应用程序(Android、iOs 和 Web),我们可以使用相同的方法来相应地显示。

>
本文链接:https://www.f2er.com/1938269.html

大家都在问