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

4
我的问题很简单,但我找不到答案,可能是因为我使用了错误的术语,但让我试试:是否有一种方法可以让黑莓应用程序(扩展常规屏幕组件)保持状态栏可见(通过状态栏,澄清一下,我指的是您看到电池电量、网络名称、信号强度等的区域)?
谢谢。
4个回答

3

根据我的经验(截至操作系统版本4.6),尚未公开API来执行此操作,不管多奇怪。如果您觉得有必要,当然可以像许多应用程序一样编写自己的状态栏。但是你必须收集信息并编写逻辑代码来显示状态信息。


嗯...... 谢谢,不过并不完全是我想听到的答案 :-)。你是否知道有没有什么好的地方可以找到这样的实现方法? - Gadi
只是为了补充答案,在今年的黑莓开发者大会上,在“API未来”会议中,他们提到在5.0版本之后,他们正在考虑添加一个UI元素来提供标准的“状态栏”功能。但就像Richard所说的那样 - 目前你必须自己动手实现。 - Marc Novakowski
是的,它在6.0上可用,非常不错。 - Richard

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);
...
}

一些需要注意的事项:除非您使屏幕无效或推入/弹出到另一个屏幕,否则图像不会刷新。此外,您可能希望为Pearl、Curve或Storm使用较小的图像。



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));

优点在于每个方法都接受一个字段作为参数,程序员可以使用管理器组合一个复杂的字段。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接