如何在黑莓应用程序中制作超链接?

Posted

技术标签:

【中文标题】如何在黑莓应用程序中制作超链接?【英文标题】:How to make HyperLink in BlackBerry application? 【发布时间】:2009-10-21 13:06:57 【问题描述】:

谁能告诉我如何在 BlackBerry 中制作超链接?

【问题讨论】:

【参考方案1】:

这是一个看起来像超链接的自定义标签字段,可以打开一个新屏幕。我们称它为 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。

【讨论】:

【参考方案2】:

我不认为有任何可用的东西,但是您可以扩展 LabelField 并通过覆盖 drawFocus 提供所需的功能,以在获得焦点时更改超链接颜色,并使用 invokeAction 来执行超链接所需的任务。

【讨论】:

【参考方案3】:
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);

【讨论】:

以上是关于如何在黑莓应用程序中制作超链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何在黑莓中实现搜索功能?

如何在黑莓应用程序中使用软键?

如何防止应用程序在黑莓中启动

如何在黑莓应用程序中设置备用入口点?

如何在黑莓应用程序文本字段中启用自动大写、标点、文本功能?

如何在黑莓中裁剪具有特定形状的图像?