我有一个 ActionBar,我在 Activity 的 onCreateOptionsMenu(Menu)
方法中添加了几个 MenuItems 对象。但我需要覆盖其中一项的内容描述。
我一直在考虑用 XML 定义 MenuItem 并设置 actionViewClass 属性。回到源代码,为 MenuItem 调用 MenuItem.getActionView()
,就像 http://developer.android.com/training/appbar/action-views.html 中描述的那样.这样我就可以在它返回的 View 对象上调用 setContentDescription()
。但我宁愿在不使用 XML 文件的情况下这样做。
除了使用 XML 选项之外,还有其他想法吗?
最佳答案
好的,我已经弄明白了。幸运的是,我不必求助于 XML 替代方案。我要做的是创建一个新的 View 对象,然后 apply it as the MenuItem's actionView .困难的部分实际上是将 View 对象的样式设置为任何普通的 MenuItem
看起来像当前主题(如果我在不使用 actionView 的情况下添加它)。按照代码 fragment (假设我的 Activity 名称是 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);
}
关于android - 如何覆盖操作栏菜单项的内容描述?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35880060/