我需要为黑莓应用程序设计 UI。这个应用程序应该支持多种黑莓分辨率。
一种方法是每次检查 screen_width 和 screen_height,并相应地从 res 文件夹中获取图像。有没有其他更有效或更好的方法来做到这一点?我还需要根据屏幕大小对文本的字体大小做同样的事情。
请帮我了解支持多种BB分辨率的标准方法
我需要为黑莓应用程序设计 UI。这个应用程序应该支持多种黑莓分辨率。
一种方法是每次检查 screen_width 和 screen_height,并相应地从 res 文件夹中获取图像。有没有其他更有效或更好的方法来做到这一点?我还需要根据屏幕大小对文本的字体大小做同样的事情。
请帮我了解支持多种BB分辨率的标准方法
你可以试试,到目前为止我在我的应用程序中尝试过的没有任何问题。
步骤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;
}
}