我正在尝试以编程方式使用自定义项目视图制作操作栏菜单。
我的menu.xml
文件:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_category"
android:icon="@drawable/ic_category"
app:showAsAction="always|collapseActionView"
android:title="@string/category">
<menu>
</menu>
</item>
</menu>
创建菜单:
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu, menu);
MenuItem category = menu.findItem(R.id.action_category);
Menu categoriesMenu = category.getSubMenu();
Category[] items = Category.values();
LayoutInflater baseInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for (int i = 0; i < items.length; ++i){
Category c = items[i];
MenuItem item = categoriesMenu.add(i, c.id, 0, c.resourceText);
View myCustomView = baseInflater.inflate(R.layout.category_list_item, null);
((ImageView)myCustomView.findViewById(R.id.icon)).setImageResource(c.resourceIcon);
item.setActionView(myCustomView);
}
}
但setActionView()
不起作用。仅创建标准文本项。有没有人知道如何以编程方式创建具有自定义布局的菜单项?
答案 0 :(得分:0)
查看显示的文档setActionView
会返回一个MenuItem本身,因此它不会操纵现有项目,而是返回带有该操作视图的新项目。 - https://developer.android.com/reference/android/view/MenuItem.html#setActionView(android.view.View)
由于它返回了一个全新的MenuItem,你可以尝试创建它并在之前调用setActionView 将它添加到你的集合中吗?
编辑:这是一个很糟糕的假设,只是因为一个项目被返回而没有发生任何操纵。请参阅下面的Renetik评论。