如何为操作栏菜单项覆盖内容描述?

4
我有一个ActionBar,在Activity的onCreateOptionsMenu(Menu)方法中添加了一些MenuItems对象。但我需要覆盖其中一个项的内容描述。
我考虑在XML中定义MenuItem并设置actionViewClass属性。然后在源代码中,为MenuItem调用MenuItem.getActionView(),就像在http://developer.android.com/training/appbar/action-views.html中所述的那样。这样我就可以在返回的View对象上调用setContentDescription()。但我不想使用XML文件。
除了使用XML选项外,是否有其他想法?
2个回答

4

好的,我已经想出来了。幸运的是,我不必转向XML替代方案。我需要做的是创建一个新的View对象,并将其应用为MenuItem的actionView。使用该方法。最困难的部分是将该视图对象样式化为当前主题下任何普通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);
    }

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)

谢谢,@karan-sharma - Alexandre Bodi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接