我在菜单项的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;
}