Blackberry:如何将BitmapField实现为Button

时间:2012-01-31 12:08:40

标签: blackberry bitmap bitmapfield

我对这款黑莓编程有点新意见...... 我想从位图和BitmapField制作自定义按钮,但是当我点击位图字段时,它总是首先显示菜单项(“打开”),然后执行run方法。

我想点击它,当我clik触控板时它会执行run方法(直接执行run方法而不显示“打开”菜单)但我无法弄清楚如何使它成为那样......

这是我的代码:

private void createFields() 
{
    Bitmap atas = Bitmap.getBitmapResource("banerputih.png");
    add(new BitmapField(atas, Field.FIELD_HCENTER));

    //separator
    add(new SeparatorField());
    Bitmap satu = Bitmap.getBitmapResource("wisata.png");
    Bitmap dua = Bitmap.getBitmapResource("trasport.png");
    Bitmap tiga = Bitmap.getBitmapResource("other.png");
    Bitmap empat = Bitmap.getBitmapResource("aboutme.png");
    Bitmap three = Bitmap.getBitmapResource("3.gif");
    add( new BitmapField(satu, Field.FOCUSABLE | Field.FIELD_HCENTER |Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(dua, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(tiga, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new BitmapField(empat, Field.FOCUSABLE | Field.FIELD_HCENTER | Field.HIGHLIGHT_FOCUS));
    add(new SeparatorField()); 
    add(new BitmapField(three, Field.FIELD_HCENTER));
    add(new SeparatorField());

    //Disini ditambahin Gambar
    //panjang 480 pixel

}

//menambahkan menu open TODO
MenuItem _openAction = new MenuItem("Open",100000,10)
{

    public void run() 
    {
        getValue();

    }

};

//menu about TODO
MenuItem _AboutAction = new MenuItem("About",100,100)
{
    public void run()
    {
        UiApplication.getUiApplication().pushScreen(new AboutScreen());
    }
};

//method getValue();
protected void getValue()
{
    Field f = getFieldWithFocus();
    if (f instanceof BitmapField)

    {
        BitmapField b = (BitmapField)f;
        b.getIndex();
        //untuk cek index
        //Dialog.alert(Integer.toString(b.getIndex()));

        if (b.getIndex() == 2)
        {

            UiApplication.getUiApplication().pushScreen(new wisataScreen());
        }
        else if (b.getIndex()== 3)
        {
            UiApplication.getUiApplication().pushScreen(new TransportScreen());
        }
        else if (b.getIndex()== 4)
        {
            UiApplication.getUiApplication().pushScreen(new HotelScreen());

        }else if (b.getIndex()== 5)
        {
            UiApplication.getUiApplication().pushScreen(new AboutScreen());
        }
    }
}

public void makeMenu(Menu m, int instance)
{
    m.add(_openAction);
    m.add(_AboutAction);
    super.makeMenu(m, instance);
}

}

2 个答案:

答案 0 :(得分:2)

您不必自己编写像位图按钮字段这样的简单组件。 RIM提供了一些你可以自由包含的好样本,并对它们进行了描述here。你可以从GitHub下载源代码,唯一可能最关心的是扩展BitmapButtonFieldBaseButtonField

通常,我还会更改示例代码中的结构,以便每个按钮/位图字段管理自己的菜单并单击处理,而不是父屏幕路由捕获/路由点击。这将允许您干净地重用您的控件。

其次,当用户点击按钮时,您不希望他们看到“运行”选项。您应该按照标准BB UX运行操作。这就是你在样本中看到的行为。如果您确实需要能够为用户提供“双击”体验,那么您可以在BaseButtonField中实现makeContextMenu方法。

答案 1 :(得分:0)

创建ButtonField时,应始终指定样式ButtonField.CONSUME_CLICK。如果不这样做,点击事件将被传递到屏幕上,当菜单将打开时,菜单将打开 用户单击该按钮,但您的按钮仍将导致执行操作。 例如:

ButtonField clearButton = new ButtonField("Clear", ButtonField.CONSUME_CLICK);