动态将图像应用于菜单项

时间:2019-01-14 05:03:47

标签: java android xml android-image

我正在尝试使用滑行以编程方式将图像添加到菜单项。

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_profile_pic"
    android:icon="@mipmap/profile_pic"
    android:orderInCategory="100"
    android:title=""
    app:showAsAction="always" />

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu, menu);

    RequestOptions requestOptions = new RequestOptions();
    requestOptions.placeholder(R.mipmap.profile_pic);
    requestOptions.error(R.mipmap.profile_pic);

    MenuItem itemProfilePic = menu.getItem(0);
    //View view = findViewById(R.id.action_profile_pic);

    if (savedProfilePic != null) {
        Glide.with(this)
                .setDefaultRequestOptions(requestOptions)
                .load(Uri.parse(savedProfilePic))
                .into(itemProfilePic);
    }
    return true;

但是,由于资源是MenuItem而不是ImageView,所以我不能使用这种方法。将其投射到ImageView也不起作用。

鉴于图像不在drawables文件夹中,而是由用户设置,如何获得所需的结果,因此也无法使用以下方法:

itemProfilePic.setActionView(savedProfilePic);接受一个整数值

最终结果

enter image description here

2 个答案:

答案 0 :(得分:0)

制作一个自定义工具栏,然后您可以使用图像视图动态更改图像

<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    app:contentInsetStart="0dp"
    android:background="@color/primaryColor"
    android:layout_height="wrap_content" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageView
            android:src="@drawable/ic_perm_24dp"
            android:layout_alignParentEnd="true"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />

    </RelativeLayout>


</android.support.v7.widget.Toolbar>

答案 1 :(得分:0)

MenuItem接口具有一种方法:setIcon(Drawable d)

  1. 获取对要更新的MenuItem的引用。
  2. 将要设置的图像转换为BitmapDrawable
  3. 根据需要调整可绘制对象,并通过MenuItem.setIcon()方法进行设置。

似乎您也可以从正在使用的图像加载器库中实现custom target。自定义目标可以包装MenuItem

注意: 由于您要夸大XML菜单,因此很有可能会刷新它。因此,还要在扩展XML后执行图像图标更新。