Как сделать HyperLink в приложении BlackBerry?

Кто-нибудь может сказать мне, как сделать гиперссылку в BlackBerry?


person Kumar    schedule 21.10.2009    source источник


Ответы (2)


Вот пользовательское поле метки, которое выглядит как гиперссылка, которая может открывать новый экран. Назовем его 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-адресу.

person clafonta    schedule 26.10.2009

Я не думаю, что есть что-то доступное, но вы можете расширить LabelField и предоставить необходимую функциональность, переопределив drawFocus, чтобы изменить цвет гиперссылки при получении фокуса, и invokeAction, чтобы выполнить задачу, требуемую от гиперссылки.

person Fostah    schedule 21.10.2009