BlackBerry - 如何在应用程序屏幕顶部显示系统状态栏

时间:2009-11-22 09:57:26

标签: blackberry statusbar blackberry-simulator

我的问题很简单,但我找不到答案,可能是因为我使用了错误的条款,但让我试试:有没有办法让BlackBerry应用程序(扩展常规的Screen组件)到保持状态栏可见(通过状态栏,澄清,我的意思是你看到电池强度,网络名称,信号强度等的区域)?

谢谢

4 个答案:

答案 0 :(得分:3)

迄今为止(根据我的经验,直到操作系统版本4.6)没有暴露出来的API,这很奇怪。如果您认为有必要,您当然可以像许多应用程序一样编写自己的状态栏。但您必须收集信息并显示状态信息,并将逻辑编码到您自己的程序中。

答案 1 :(得分:2)

这是一些示例代码。首先,对于一个不错的标题栏,请看这里:http://www.naviina.eu/wp/blackberry/iphone-style-field-for-blackberry/

显示电池强度图像:

import net.rim.device.api.system.Bitmap;
import net.rim.device.api.system.DeviceInfo;
...
public static Bitmap getBatteryImage(){
        int batteryPercent = DeviceInfo.getBatteryLevel();
        int val = 1;
        if(batteryPercent > 80){
            val = 5;
        }else if(batteryPercent > 60 ){
            val = 4;
        }else if(batteryPercent > 40){
            val = 3;
        }else if(batteryPercent > 20){
            val = 2;
        }else {
            val = 1;
        }
        Bitmap batteryImage = Bitmap.getBitmapResource("mybattery"+val+".png");
        return batteryImage;
    }
...

您需要将图像mybattery1.png创建为mybattery5.png,并将它们放在您的src文件夹中。一个好的尺寸开始是28x11像素(GIMP是一个很好的免费图像编辑器)。如果您使用了Naviina.eu的标题条形码,那么在paint方法中插入以下代码,如下所示:

protected void paint(Graphics graphics) {
...
        int w = this.getPreferredWidth();
        int h = this.getPreferredHeight();
        Bitmap batteryImage = getBatteryImage();
        int batteryStartY = (h - batteryImage.getHeight()) / 2;    
        graphics.drawBitmap(w - batteryImage.getWidth(), batteryStartY, w, h,
                batteryImage, 0, 0);
...
}

有些注意事项:除非您使屏幕无效或按下/弹出到另一个屏幕,否则图像不会刷新。此外,您可能需要更小的图像用于珍珠与曲线或风暴。

答案 2 :(得分:1)

答案 3 :(得分:0)

实际上有三个地方可以在MainScreen子类中插入您的状态信息:

  • 横幅区域 - 位于顶部 屏幕
  • 标题区域 - 位于横幅区域下方,通常具有不同的背景
  • 状态区域 - 位于屏幕底部

使用setBanner(Field),setTitle(Field)和setStatus(Field)显示信息,如下所示:

    HorizontalFieldManager hfm = new HorizontalFieldManager();
    EncodedImage logo = EncodedImage.getEncodedImageResource("img/Logo.png");       
    Bitmap bm = logo.getBitmap();

    hfm.add(new BitmapField(bm));
    hfm.add(new LabelField("Banner area"));     
    setBanner(hfm);

    setTitle(new LabelField("Title area", LabelField.FIELD_HCENTER));
    setStatus(new LabelField("Status area", LabelField.FIELD_HCENTER));

优点是每个方法都接受一个Field作为参数,程序员可以与管理者组成一个复杂的Field。