【问题标题】:Icons of MenuItems are filled with grey color, thus not showing the imageMenuItems 的图标用灰色填充,因此不显示图像
【发布时间】:2019-05-07 18:26:46
【问题描述】:

我正在编写汽车管理应用程序,但在创建动态内容时遇到了一些问题。我制作了一个带有菜单的 NavigationView 以在侧边栏中显示选项。 MenuItems 的左侧应该有小图标。图像是在另一个上下文中创建的,并使用 Base64 编码发送到 mysql 数据库,然后在刷新菜单项时对其进行解码。

String carName = obj.getString("carName");
                        String sign = obj.getString("sign");
                        String bitmap = obj.getString("bitmap");
                        MenuItem item = menu.add(0, i, 0, carName);
                        byte[] decodeString = Base64.decode(bitmap, Base64.DEFAULT);
                        Bitmap decodeImage = BitmapFactory.decodeByteArray(decodeString, 0, decodeString.length);
                        BitmapDrawable d = new BitmapDrawable(getResources(), decodeImage);
                        item.setIcon(d);

到目前为止,我所做的是使用 Base64 编码的字符串创建一个新的 Drawable。然后我只想将MenuItem的Icon设置为创建的Drawable。这只会在 MenuItem 的左侧生成一个灰色框,而不是我想要的特定图像。

我正在使用 compileSdkVersion 28、minSdkVersion 23,使用 Android Studio 进行编码。我运行了调试器并检查了位图。 Android Studio 可以很好的显示这些。

【问题讨论】:

    标签: java android menuitem bitmapfactory navigationview


    【解决方案1】:

    好吧,我终于搞定了。

    view.setItemIconTintList(null)
    

    在这里成功了。

    整个例子:

    try {
                        JSONArray arr = new JSONArray(response);
                        NavigationView view = findViewById(R.id.nav_view);
                        view.setItemIconTintList(null);
                        Menu menu = view.getMenu();
                        menu.clear();
                        for (int i = 0; i < arr.length(); i++) {
                            JSONObject obj = arr.getJSONObject(i);
                            String carName = obj.getString("carName");
                            String sign = obj.getString("sign");
                            String bitmap = obj.getString("bitmap");
                            MenuItem item = menu.add(0, i, 0, carName);
                            byte[] decodeString = Base64.decode(bitmap, Base64.DEFAULT);
                            Bitmap decodeImage = BitmapFactory.decodeByteArray(decodeString, 0, decodeString.length);
                            BitmapDrawable d = new BitmapDrawable(getResources(), Bitmap.createScaledBitmap(decodeImage, 50, 50, true));
                            item.setIcon(d.getCurrent());
                            item.setIcon(item.getIcon());
                            MainActivity.super.onCreateOptionsMenu(menu);
    
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-21
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多