2

我需要为黑莓应用程序设计 UI。这个应用程序应该支持多种黑莓分辨率。

一种方法是每次检查 screen_width 和 screen_height,并相应地从 res 文件夹中获取图像。有没有其他更有效或更好的方法来做到这一点?我还需要根据屏幕大小对文本的字体大小做同样的事情。

请帮我了解支持多种BB分辨率的标准方法

4

1 回答 1

3

你可以试试,到目前为止我在我的应用程序中尝试过的没有任何问题。

步骤1:

创建一个单独的包,例如 com.your_app_name.uiconfig,其中将包含一个抽象类,例如 ModelConfig 和用于不同分辨率的不同类,例如 BB83xxConfig 类用于分辨率 320x240(宽 x 高),BB95xxConfig 类用于分辨率 360 x 480(宽 x 高)。

第2步:

ModelConfig 类将提供所有通用方法的具体实现,而与屏幕分辨率无关,并声明抽象方法,其具体实现将根据屏幕分辨率在各个类中提供。

第 3 步:使为特定分辨率实现的每个类扩展 ModelConfig 并根据要求提供方法的具体实现。

步骤 4:使用单例模式获取 ModelConfig 的实例,以便它只被实例化一次,并且该实例在整个过程中都会被使用。

ModelConfig.java(只是一个示例)

public abstract class ModelConfig {

private static ModelConfig modelConfig = null;

public static ModelConfig getConfig() {

    if (modelConfig == null) {

        if (DeviceInfo.getDeviceName().startsWith("83")) {
            modelConfig = new BB83xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("85")) {
            // 85xx also has 360 x 240 same as 83xx device
            modelConfig = new BB83xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("89")) {
            modelConfig = new BB89xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("90")) {
            modelConfig = new BB90xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("95")) {
            modelConfig = new BB95xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("96")) {
            modelConfig = new BB96xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("97")) {
            modelConfig = new BB97xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("99")) {
            modelConfig = new BB99xxConfig();
        } else if (DeviceInfo.getDeviceName().startsWith("98")) {
            // 9800 also has 360 x 480 same as 95xx device
            modelConfig = new BB95xxConfig();
        }else {
            modelConfig = new DefaultConfig();
        }
    }

    return modelConfig;
}

// Font height for the default font used for the application.
public abstract int getApplicationFontHeight();

// Font height for the header label font.
public abstract int getHeaderLabelFontHeight();

// Height for the coloured background of Header.
public abstract int getHeaderBarHeight();

// Height for the individual row in the list.
public abstract int getCustomListRowHeight();   

public abstract int getStandardButtonWidth();

public abstract int getStandardLabelWidth();    

public abstract int getTitleFontHeight();   

// get Background colour for Header.
public int getHeaderBackgroundColor() {
    return 0x26406D;
}   

// get Bitmap showing Right Arrow.
public Bitmap getBitmapRightArrow() {
    return Bitmap.getBitmapResource("right_arrow.png");
}

// get Bitmap rounded black border for editfield.
public Bitmap getBitmapRoundedBorderEdit(){
    return Bitmap.getBitmapResource("rounded_border_black.png");
}

// get Bitmap rounded gray border and white background.
public Bitmap getBtmpRoundedBorderBgrnd(){
    return Bitmap.getBitmapResource("rounded_border_grey.png");
}

// get Bitmap rounded gray border and white background.
public Bitmap getBtmpTransparentBgrnd(){
    return Bitmap.getBitmapResource("img_transparent_background.png");
}

// get Bitmap showing down Arrow.
public Bitmap getBitmapDownArrow(){

    return Bitmap.getBitmapResource("down_arrow.png");
}   

}

BB95xxConfig.java(只是一个示例)

/*
 * Common resolution 360*480 pixels (width x height)
 */
public class BB95xxConfig extends ModelConfig {
    // Font height for the default font used for the application.
    // returns Desired height in pixels.
    public int getApplicationFontHeight() {
        return 18;
    }

    // Font height for the header label font.
    // returns Desired height in pixels.
    public int getHeaderLabelFontHeight() {
        return 20;
    }

    // returns Desired height in pixels for the header background.
    public int getHeaderBarHeight() {
        return Display.getHeight() / 10;
    }

    public int getCustomListRowHeight() {
        return 50;
    }   

    public int getStandardButtonWidth() {
        return 108;
    }

    public int getStandardLabelWidth() {
        return 150;
    }

    public int getTitleFontHeight() {
            return 11;
    }
}
于 2013-09-11T15:04:06.860 回答