Вот пользовательское поле метки, похожее на гиперссылку, которое может открыть новый экран. Давайте назовем его SampleOpenScreenHyperLinkField , и мы добавим его как контекстный или полный элемент меню.
- Создать точку входа в приложение
- Создание примера экрана и добавление поля пользовательской метки
Сначала точка входа.
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));
}
}
Далее ваш пример экрана.
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));
}
}
Теперь для вашего настраиваемого поля метки.
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;
}
}
Результат: у вас должен быть экран с гиперссылкой, ведущей к другому экрану. Что если вы хотите вместо этого вызвать браузер? Вы можете использовать следующий класс для этого.
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;
}
}
Результат: нажатие на ссылку или пункт меню должно вызвать браузер устройства с нужным URL-адресом.