更新
从 OP 获得更多澄清后,我相信正确的答案是您不能按照他们的要求...创建自己的菜单,并以编程方式从内置菜单调用 MenuItem 命令/操作。
原始答案
如果我理解正确,您想要创建自己的菜单,但您不想使用内置的 BlackBerry 菜单,因为您的菜单需要看起来不同?
如果是这种情况,那么我会建议另一种方法。我认为黑莓希望你这样做的方式是将你的 MenuItem 对象添加到内置的 Menu 中Screen
,然后在你的类的makeMenu()
方法中更改菜单的各种属性:
protected void makeMenu(Menu menu, int context)
这是有关执行此操作的 BlackBerry 文档,这是一个示例,它结合了添加上面显示的菜单项以及对菜单外观的一些更改。希望您发现这是一种更简单的方法来做您想做的事,而不必将内置菜单中的 MenuItems链接到您的:
public class MenuScreen extends MainScreen {
private Background _menuBackground;
private Border _menuBorder;
private Font _menuFont;
private MenuItem _customMenuItems[];
public MenuScreen() {
setTitle("Custom Menu Sample");
getMainManager().setBackground(BackgroundFactory.createSolidBackground(Color.BLACK));
RichTextField f = new RichTextField("Creating a custom menu") {
protected void paint(Graphics g) {
int oldColor = g.getColor();
g.setColor(Color.WHITE);
super.paint(g);
g.setColor(oldColor);
}
};
add(f);
// Customize the look (border/color/font) of the BB menu here:
XYEdges thickPadding = new XYEdges(10, 10, 10, 10);
_menuBorder = BorderFactory.createRoundedBorder(thickPadding, Border.STYLE_DOTTED);
_menuBackground = BackgroundFactory.createSolidTransparentBackground(Color.DARKMAGENTA, 80);
try
{
FontFamily family = FontFamily.forName("BBCasual");
_menuFont = family.getFont(Font.PLAIN, 30, Ui.UNITS_px);
}
catch (final ClassNotFoundException cnfe)
{
UiApplication.getUiApplication().invokeLater(new Runnable()
{
public void run()
{
Dialog.alert("FontFamily.forName() threw " + cnfe.toString());
}
});
}
// Add our own menu items, too
_customMenuItems = new MenuItem[3];
_customMenuItems[0] = new MenuItem("Hola Dora!", 110, 10) {
public void run() {
Dialog.inform("Hola Dora!");
}
};
_customMenuItems[1] = new MenuItem("Close popup!", 111, 10) {
public void run() {
Dialog.inform("Close popup!");
}
};
_customMenuItems[2] = new MenuItem("Hola Diego!", 112, 10) {
public void run() {
Dialog.inform("Hola Diego!");
}
};
addMenuItem(_customMenuItems[0]);
addMenuItem(_customMenuItems[1]);
addMenuItem(_customMenuItems[2]);
}
protected void makeMenu(Menu menu, int context)
{
menu.setBorder(_menuBorder);
menu.setBackground(_menuBackground);
menu.setFont(_menuFont);
// invoking super.makeMenu() will add {Close, Switch Application, etc.} items
super.makeMenu(menu, context);
}
}
结果
注意:如果您只需要支持 OS 6.0 及更高版本,您还有其他一些选择(让我们知道)。此外,您编写自己的菜单的动机可能是因为您想更改字体颜色,我认为您无法使用我上面显示的代码来做到这一点。同样,如果这是您设计的一部分,请告诉我们。谢谢。