作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
使用 codenameone 中的 Toolbar 类,如何动态设置 SideMenuBar 的可见性?
我正在使用 WebBrowser 组件,并且我只希望登录后可以访问 SideMenu。
当我只是在 SideMenuBar 上放置命令时(方法 1),我实现了我想要的行为,但现在我已经切换到使用 Toolbar 类来获得 LnF 的优势(方法 2),hideLeftSideMenuBool
主题常量似乎没有被观察到。
//METHOD 1
//CHANGING THE THEME DYNAMICALLY HIDES THE SIDEMENUBAR WHEN I'VE SIMPLY
//ADDED COMMANDS LIKE THIS
current.addCommand(new Command("Home") {
{
putClientProperty("place", "side");
}
});
//METHOD 2
//CHANGING THE THEME DYNAMICALLY DOES NOT HIDE THE SIDEMENUBAR WHEN I'VE
//USED toolbar.addComponentToSideMenu TO ADD BUTTONS WITH COMMANDS
toolbar = new Toolbar();
current.setToolbar(toolbar);
Button home = new Button("Home");
toolbar.addComponentToSideMenu(home, new Command("Home"){
@Override
public void actionPerformed(ActionEvent evt) {
wb.setURL(startURL);
}
});
...
//I USED THE FOLLOWING CODE TO DYNAMICALLY SET THE THEME AFTER EVALUATING A
//WebBrowser URI REGARDLESS OF WHICH METHOD WAS USED TO ADD COMMANDS
wb.setBrowserNavigationCallback(new BrowserNavigationCallback() {
public boolean shouldNavigate(String url) {
if ((url.indexOf("users/login") != -1)) {
try {
//theme_noside.res has hideLeftSideMenuBool set to true
theme = Resources.openLayered("/theme_noside");
UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
current.refreshTheme();
}catch(IOException e){
Log.p(e.toString());
}
}
else {
try {
//theme.res has hideLeftSideMenuBool set to false
theme = Resources.openLayered("/theme");
UIManager.getInstance().setThemeProps(theme.getTheme(theme.getThemeResourceNames()[0]));
UIManager.getInstance().getLookAndFeel().setMenuBarClass(SideMenuBar.class);
Display.getInstance().setCommandBehavior(Display.COMMAND_BEHAVIOR_SIDE_NAVIGATION);
current.refreshTheme();
}catch(IOException e){
Log.p(e.toString());
}
}
return true;
}
});
最佳答案
仅使用 Toolbar api,无需调用或更改任何主题常量。
将工具栏设为最终工具栏或在 beforeShow()
方法外部声明它,以便您可以在内部方法 shouldNavigate(String url)
中访问它。
您需要做的就是调用removeAll()
,然后重置标题并添加您想要的组件。如果工具栏没有命令或标题,则默认隐藏。
wb.setBrowserNavigationCallback(new BrowserNavigationCallback() {
public boolean shouldNavigate(String url) {
if ((url.indexOf("users/login") != -1)) {
toolbar.removeAll();
toolbar.setTitleComponent(new Label("My Form", "Title"));
toolbar.getComponentForm().revalidate();
} else {
//Do nothing, since I've already add the commands I want earlier
}
return true;
}
});
关于java - 如何动态设置代号一中 SideMenuBar 的可见性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424905/
我是一名优秀的程序员,十分优秀!