How do I make HyperLink in the BlackBerry app?
3 answers
Here's a custom label field that looks like a hyperlink that can open a new screen. Let's call it SampleOpenScreenHyperLinkField and we'll add it as a context or complete menu item.
- Create application entry point
- Create a sample screen and add a custom label field
Entry point first.
package sample;
import net.rim.device.api.ui.UiApplication;
/**
* The entry point to application startup.
*/
public class SampleApp extends UiApplication {
/**
* The entry point.
*
* @param args
*/
public static void main(String[] args) {
// Create a new instance of the application
// and start the application on an event thread
SampleApp app = new SampleApp();
app.enterEventDispatcher();
}
/**
* Basic constructor.
*/
public SampleApp() {
UiApplication.getUiApplication().pushScreen(new SampleScreen(1));
}
}
Next, your sample screen.
package sample;
import net.rim.device.api.ui.Manager;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.container.MainScreen;
public class SampleScreen extends MainScreen {
public SampleScreen(int screenNumber) {
super(Manager.NO_VERTICAL_SCROLL | Manager.NO_VERTICAL_SCROLLBAR);
this.add(new RichTextField("Screen " + screenNumber));
int nextScreenNumber = screenNumber +1;
this.add(new SampleOpenScreenHyperLinkField("Screen " + nextScreenNumber, nextScreenNumber));
}
}
Now, for your custom label field.
package sample;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.LabelField;
/**
*
* @author chad.lafontaine
*
*/
public class SampleOpenScreenHyperLinkField extends LabelField {
private int pageCount = -1;
private MenuItem mGetLinkMenuItem;
/**
*
* @param hyperlinkLabel - label to display link
*/
public SampleOpenScreenHyperLinkField(String hyperlinkLabel, int pageCount) {
super(hyperlinkLabel, FOCUSABLE);
this.pageCount = pageCount;
Font font = getBasefontSize(10);
setFont(font.derive(Font.UNDERLINED | Font.PLAIN));
mGetLinkMenuItem = new SampleOpenScreenMenuItem(hyperlinkLabel);
}
/**
* Context menu
*/
public ContextMenu getContextMenu() {
// Add our "Get Link" menu item to the context menu
ContextMenu menu = super.getContextMenu();
menu.addItem(mGetLinkMenuItem);
return menu;
}
/**
* Inner class
*/
class SampleOpenScreenMenuItem extends MenuItem {
public SampleOpenScreenMenuItem(String menuLabel) {
super(menuLabel, 0, 100);
}
public void run() {
UiApplication.getUiApplication().pushScreen(new SampleScreen(pageCount));
}
}
/**
* Base font of the application. Method is static for other UI components to
* call for calculation of display fields.
*
* @return
*/
public static Font getBasefontSize(int size) {
Font baseFont = null;
try {
baseFont = FontFamily.forName("BBClarity").getFont(FontFamily.SCALABLE_FONT, size);
} catch (ClassNotFoundException e) {
baseFont = Font.getDefault().getFontFamily().getFont(FontFamily.SCALABLE_FONT, size);
}
return baseFont;
}
}
Result: You should have a screen with a hyperlink to another screen. What if you want to use the browser instead? You can use the following class for this.
package sample;
import net.rim.blackberry.api.browser.Browser;
import net.rim.device.api.ui.ContextMenu;
import net.rim.device.api.ui.Font;
import net.rim.device.api.ui.FontFamily;
import net.rim.device.api.ui.MenuItem;
import net.rim.device.api.ui.component.LabelField;
/**
* Custom action label to invoke a browser given a URL.
*/
public class InvokeBrowserHyperlinkField extends LabelField {
private String mUrl;
private MenuItem mGetLinkMenuItem;
/**
* Constructs a new HyperlinkField instance with provided label, style and
* URL
*
* @param label
* Label string to be displayed.
* @param style
* Field style for the label.
* @param url
* URL to be opened in the browser.
*/
public InvokeBrowserHyperlinkField(String label, long style, String url) {
super(label, style | FOCUSABLE);
setFont(Font.getDefault().getFontFamily().getFont(FontFamily.SCALABLE_FONT, 10));
mUrl = url;
mGetLinkMenuItem = new MenuItem("Get Link", 0, 0) {
public void run() {
// invoke browser with URL
Browser.getDefaultSession().displayPage(mUrl);
}
};
}
/**
* Constructs a new HyperlinkField instance with provided label and url with
* default style
*
* @param label
* Label string to be displayed.
* @param url
* URL to be opened in the browser.
*/
public InvokeBrowserHyperlinkField(String label, String url) {
this(label, 0, url);
}
public ContextMenu getContextMenu() {
// Add our "Get Link" menu item to the context menu
ContextMenu menu = super.getContextMenu();
menu.addItem(mGetLinkMenuItem);
return menu;
}
}
Result: Clicking on a link or menu item should bring up the device browser to the desired URL.
+9
source to share
URLButtonField bf;
bf = new ButtonField("Example", "http://www.example.com");
bf.setFieldChangeListener( new FieldChangeListener() {
void fieldChanged(Field field, int context) {
if (field == this) {
BrowserSession session =- Browser.getDefaultSession();
session.displayPage(getURL());
}
}
} );
add(bf);
0
123
source
to share