Tab bar in blackberry without ToolBarManager
I want to create a tool bar of exact look and feel for my blackberry project. Any help is greatly appreciated. Please note I cannot use ToolBarManager. My project should support all devices after OS 5.0
Thanks
Solution 1:
This is a sample code that how to create Tabs in blackberry. I had total 3 screens after statUp(which extends UiApplication) class
-
LoadingScreen.java
public class LoadingScreen extends MainScreen { int current_index=0; BottomPanel bottomPanel; public LoadingScreen(int current_index) { this.current_index=current_index; bottomPanel=new BottomPanel(current_index); } public void createGUI() { setTitle("Loading Screen"); VerticalFieldManager vertical=new VerticalFieldManager(USE_ALL_WIDTH) { protected void sublayout(int maxWidth, int maxHeight) { super.sublayout(Display.getWidth(), 150); setExtent(Display.getWidth(), 150); } }; vertical.setBackground(BackgroundFactory.createSolidBackground(Color.GREEN)); ButtonField button=new ButtonField("Click"); vertical.add(button); add(vertical); setStatus(bottomPanel); } }
-
BottomPanel.java
public class BottomPanel extends VerticalFieldManager implements FieldChangeListener { Bitmap news_bit=Bitmap.getBitmapResource("news.png");//these images are cutting according to device requirement; Bitmap news_bit_hover=Bitmap.getBitmapResource("news_h.png"); Bitmap settings_bit=Bitmap.getBitmapResource("settings.png"); Bitmap settings_bit_hover=Bitmap.getBitmapResource("settings_h.png"); Bitmap about_bit=Bitmap.getBitmapResource("about.png"); Bitmap about_bit_hover=Bitmap.getBitmapResource("about_h.png"); PictureBackgroundButtonField news_pic,settings_pic,about_pic; HorizontalFieldManager hr; int current_index=0; public BottomPanel(int current_index) { super(FOCUSABLE); this.current_index=current_index; VerticalFieldManager ver=new VerticalFieldManager(USE_ALL_WIDTH|USE_ALL_HEIGHT) { protected void sublayout(int width, int height) { super.sublayout(width, news_bit.getHeight()); setExtent(width, news_bit.getHeight()); } }; hr=new HorizontalFieldManager(FIELD_HCENTER); if(current_index==1) { news_pic=new PictureBackgroundButtonField(news_bit.getWidth(),news_bit.getHeight(), Field.NON_FOCUSABLE|Field.FIELD_VCENTER, news_bit_hover, news_bit_hover); } else { news_pic=new PictureBackgroundButtonField(news_bit.getWidth(),news_bit.getHeight(), Field.FOCUSABLE|Field.FIELD_VCENTER, news_bit, news_bit_hover); } news_pic.setChangeListener(this); hr.add(news_pic); if(current_index==2) { settings_pic=new PictureBackgroundButtonField(settings_bit.getWidth(),settings_bit.getHeight(), Field.NON_FOCUSABLE|Field.FIELD_VCENTER, settings_bit_hover, settings_bit_hover); } else { settings_pic=new PictureBackgroundButtonField(settings_bit.getWidth(),settings_bit.getHeight(), Field.FOCUSABLE|Field.FIELD_VCENTER, settings_bit, settings_bit_hover); } settings_pic.setChangeListener(this); hr.add(settings_pic); if(current_index==3) { about_pic=new PictureBackgroundButtonField(about_bit.getWidth(),about_bit.getHeight(),Field.NON_FOCUSABLE|Field.FIELD_VCENTER, about_bit_hover, about_bit_hover); } else { about_pic=new PictureBackgroundButtonField(about_bit.getWidth(),about_bit.getHeight(), Field.FOCUSABLE|Field.FIELD_VCENTER, about_bit, about_bit_hover); } about_pic.setChangeListener(this); hr.add(about_pic); ver.add(hr); add(ver); } public void fieldChanged(Field field, int context) { if(field==news_pic) { LoadingScreen loadingScreen=new LoadingScreen(1); UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen()); UiApplication.getUiApplication().pushScreen(loadingScreen); loadingScreen.createGUI(); } else if(field==settings_pic) { LoadingScreen loadingScreen=new LoadingScreen(2); UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen()); UiApplication.getUiApplication().pushScreen(loadingScreen); loadingScreen.createGUI(); } else if(field==about_pic) { LoadingScreen loadingScreen=new LoadingScreen(3); UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen()); UiApplication.getUiApplication().pushScreen(loadingScreen); loadingScreen.createGUI(); } } }
-
PictureBackgroundButtonField.java
public class PictureBackgroundButtonField extends Field { private String _label; private int _labelHeight; private int _labelWidth; private Font _font; private Bitmap _currentPicture; private Bitmap _onPicture ; private Bitmap _offPicture ; public PictureBackgroundButtonField(int width,int height, long style, Bitmap picture, Bitmap selectedPic) { super(style); _font = getFont(); _label = ""; _labelHeight = height; _labelWidth = width; _currentPicture = picture; _onPicture = selectedPic; _offPicture = picture; } public int getPreferredHeight() { return _labelHeight; } public int getPreferredWidth() { return _labelWidth; } protected void onFocus(int direction) { _currentPicture = _onPicture; invalidate(); } protected void onUnfocus() { _currentPicture = _offPicture; invalidate(); } protected void drawFocus(Graphics graphics, boolean on) { // Do nothing } protected void layout(int width, int height) { setExtent( getPreferredWidth(), getPreferredHeight()); } protected void paint(Graphics graphics) { graphics.drawBitmap(0, 0, getPreferredWidth(), getPreferredHeight(), _currentPicture, 0, 0); graphics.setFont(_font); graphics.drawText(_label, 4, 2, (int)( getStyle() & DrawStyle.ELLIPSIS | DrawStyle.HALIGN_MASK ), getWidth() - 6 ); } protected boolean navigationClick(int status, int time) { fieldChangeNotify(1); return true; } }
Try this code and see the difference;
Solution 2:
Put setStatus(bottomPanel);
in the constructor of the LoadingScreen
.