我有一个ActionBar,我在Activity onCreateOptionsMenu(Menu)
方法中添加了几个MenuItems对象。但是我需要覆盖其中一个项目的内容描述。
我一直在考虑在XML中定义MenuItem并设置actionViewClass属性。回到源代码中,为MenuItem调用MenuItem.getActionView()
,就像http://developer.android.com/training/appbar/action-views.html中所述。这样我就可以在它返回的View对象上调用setContentDescription()
。但我宁愿在不使用XML文件的情况下这样做。
除了使用XML选项之外,有没有人有任何想法?
答案 0 :(得分:1)
MenuItem
都是如此(如果我在不使用actionView的情况下添加它)。关注代码段(假设我的活动名称为MyActivity
):
public boolean onCreateOptionsMenu(Menu menu) {
Button buttonView = new Button(this, null, android.R.attr.actionButtonStyle);
if (Build.VERSION.SDK_INT < 23) {
buttonView.setTextAppearance(this, android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu);
} else {
buttonView.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu);
}
buttonView.setText(R.string.option_title); // button label
buttonView.setContentDescription("Content description");
buttonView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyActivity.this.onOptionsItemSelected(item);
}
});
MenuItem item = menu.add(R.string.option_title);
item.setActionView(buttonView);
...
return super.onCreateOptionsMenu(menu);
}
答案 1 :(得分:0)
我最近不得不为我的应用做这件事,所选的答案帮助了我,在 Kotlin 中发布了所选的答案:
val profileIcon = ImageButton(context)
profileIcon.setImageResource(R.drawable.icon_profile)
profileIcon.background = null
profileIcon.contentDescription = "Profile"
val item: MenuItem = menu.add("Profile")
item.setShowAsAction(SHOW_AS_ACTION_ALWAYS)
item.actionView = profileIcon
profileIcon.setOnClickListener {
onOptionsItemSelected(item)
}
super.onCreateOptionsMenu(menu, inflater)