How do I make HyperLink in the BlackBerry app?

Can someone tell me how to make a hyperlink in BlackBerry?

+2


source to share


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


I don't think there is anything available, but you can extend the LabelField and provide the functionality you need by overriding drawFocus to change the color of the hyperlinks when receiving focus and invokeAction to accomplish the task required for the hyperlink.



0


source


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


source







All Articles