我在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>
的java
CircleImageView profile_icon = (CircleImageView) findViewById(R.id.profile_icon_main);
profile_icon.setImageResource(R.drawable.user_image_black);
答案 0 :(得分:0)
CircleImageView profile_icon = (CircleImageView) findViewById(R.id.profile_icon_main);
profile_icon.setImageResource(getResources().getIdentifier(user_image_black, "drawable", getPackageName()));
如果您想以编程方式设置图像,这将有效。
答案 1 :(得分:0)
您可以访问ActionView
中的onCreateOptionsMenu()
(及其子女)。请注意,您必须撰写actionView.findViewById(...)
,因为您想要访问View
的{{1}}个孩子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;
}