我在菜单项的actionLayout内使用ImageView,但是当我尝试设置图像资源时,我得到了NPE:/我不确定我可能做错了什么,将不胜感激任何帮助! :)

Menu.xml

 <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">

        <item
            android:id="@+id/add_note"
            android:icon="?attr/add_note_icon"
            android:title="@string/add_note"
            app:showAsAction="ifRoom"/>

        <item
            android:id="@+id/user_image"
            android:title="user_image"
            android:orderInCategory="1"
            app:actionLayout="@layout/profile_icon"
            app:showAsAction="always"/>

        <item
            android:title="@string/themes"
            android:id="@+id/themes"
            app:showAsAction="never"/>

    </menu>


profile_icon.xml

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="30dp"
    android:layout_height="30dp"
    android:layout_gravity="center">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/profile_icon_main"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_marginLeft="-4dp"
        android:src="@drawable/user_image_blue"/>

</FrameLayout>


爪哇

CircleImageView profile_icon = (CircleImageView) findViewById(R.id.profile_icon_main);
profile_icon.setImageResource(R.drawable.user_image_black);

最佳答案

您可以在ActionView中访问onCreateOptionsMenu()(及其子级)。请注意,您必须编写actionView.findViewById(...),因为您要访问View内容的ActionBar的子View,而不是Activity内容的子View(通常从布局资源中夸大它)您在setContentView()中引用)。

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    MenuItem menuItem = menu.findItem(R.id.user_image);
    View actionView = menuItem.getActionView();
    actionView.setBackgroundColor(Color.RED);

    ImageView imageView = actionView.findViewById(R.id.icon_main);
    imageView.setImageResource(R.drawable.user_image_black);
    return true;
}

07-26 09:40