如何覆盖操作栏菜单项的内容描述?
How to override content description for an Action Bar MenuItem?
我有一个 ActionBar,我在 Activity 的 onCreateOptionsMenu(Menu)
方法中为其添加了几个 MenuItems 对象。但我需要覆盖其中一项的内容描述。
我一直在考虑在 XML 中定义 MenuItem 并设置 actionViewClass 属性。回到源代码,为 MenuItem 调用 MenuItem.getActionView()
,就像 http://developer.android.com/training/appbar/action-views.html 中描述的那样。这样我就可以在 View 对象上调用 setContentDescription()
returns。但我宁愿不使用 XML 文件。
除了使用 XML 选项之外,还有其他想法吗?
好的,我知道了。幸运的是,我不必转向 XML 替代方案。我必须做的是创建一个新的 View 对象,然后 apply it as the MenuItem's actionView。困难的部分实际上是将视图对象设置为当前主题的任何普通 MenuItem
的样式(如果我在不使用 actionView 的情况下添加它)。按照代码片段(假设我的 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);
}
我最近不得不为我的应用程序做这件事,选择的答案对我有帮助,在 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)
我有一个 ActionBar,我在 Activity 的 onCreateOptionsMenu(Menu)
方法中为其添加了几个 MenuItems 对象。但我需要覆盖其中一项的内容描述。
我一直在考虑在 XML 中定义 MenuItem 并设置 actionViewClass 属性。回到源代码,为 MenuItem 调用 MenuItem.getActionView()
,就像 http://developer.android.com/training/appbar/action-views.html 中描述的那样。这样我就可以在 View 对象上调用 setContentDescription()
returns。但我宁愿不使用 XML 文件。
除了使用 XML 选项之外,还有其他想法吗?
好的,我知道了。幸运的是,我不必转向 XML 替代方案。我必须做的是创建一个新的 View 对象,然后 apply it as the MenuItem's actionView。困难的部分实际上是将视图对象设置为当前主题的任何普通 MenuItem
的样式(如果我在不使用 actionView 的情况下添加它)。按照代码片段(假设我的 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);
}
我最近不得不为我的应用程序做这件事,选择的答案对我有帮助,在 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)