我正在尝试设计一个黑莓应用程序,想知道是否有任何资源可以教授如何创建自定义用户界面元素、皮肤现有的元素以及还有哪些其他可能性?
我已经开发了一些具有自定义UI等内容的iPhone应用程序,不确定BB世界在UI开发方面提供了什么。
任何提示、建议或想法都将非常棒。
我正在尝试设计一个黑莓应用程序,想知道是否有任何资源可以教授如何创建自定义用户界面元素、皮肤现有的元素以及还有哪些其他可能性?
我已经开发了一些具有自定义UI等内容的iPhone应用程序,不确定BB世界在UI开发方面提供了什么。
任何提示、建议或想法都将非常棒。
在黑莓中没有皮肤,我知道实现皮肤效果的两种方法是:
已删除无法访问的 Imageshack 链接 - 黑莓主题构建器
使用主题构建器可以做什么? 它的一些主要功能包括:
- 自定义黑莓应用程序图标
- 更改主屏幕横幅图像和图标/指示灯颜色
- 创建自己的按钮
- 自定义对话框和弹出屏幕的外观
- 自定义空闲屏幕
- 自定义菜单和列表的外观
- 自定义电话应用程序屏幕
- 自定义在黑莓设备上使用的字体
如何创建您自己的个性化黑莓主题 by BrileyKenney
bb dev journal - Just Theme It!
黑莓主题和动画图形
坏消息 - 主题适用于整个设备操作系统和每个应用程序
虽然创建的主题可能是一个独立的软件设计产品,但我认为为开发的应用程序创建自己的主题并不是一个好主意。
编程GUI可能需要一些时间,如果你想在不编写代码的情况下解决GUI规划中的一些问题,你可能需要绘制GUI模型。
您可以使用ArtfulBits提供的免费黑莓UI原型Visio Stencils-v1.0。
已删除死亡的Imageshack链接
已删除死亡的Imageshack链接
通过创建自定义控件,您可以配置:
所有这些都是针对以下状态的:
最后,您可以通过设置背景图像来轻松地美化控件
devsushi.com:Blackberry JDE API-用户界面字段参考基本上会给出现有的黑莓UI控件的想法,附有代码片段和屏幕截图。
SO:如何将项目添加到ListField(黑莓)
SO:嵌入式HTML控件适用于Blackberry?
SO:Blackberry-如何从DateField获取日期时间值?
SO:将BlackBerry应用程序样式设置为类似iPhone
一组关于编写自定义控件的文章:
思考黑莓:黑莓 UI - 一个简单的自定义字段
Coderholic:Blackberry 自定义按钮字段
无线电:为 BBStorm 创建自己的虚拟键盘
无线电:带有复选框的 ListField
CodeProject:创建作为 BlackBerry 自定义字段的 XY 图表/图形
SO:Blackberry - 自定义大小 EditField
SO:Blackberry - 如何为 BasicEditField 添加边框?
SO:Blackberry - 设置 LabelField 背景颜色
SO:Blackberry 更改水平管理器焦点上子字段的背景和字体颜色
SO:为 RichTextField、TextField 设置背景和字体颜色
SO:Blackberry Java:没有插入符号的 TextField?
SO:Image Map-类似的 Blackberry 控件 - CLDC 应用程序
SO:Blackberry - 单行 BasicEditField,具有大文本
SO:Blackberry - 自定义 BubbleChartField
SO:Blackberry - 从带复选框的列表中获取已选项目
SO:黑莓 - 创建自定义日期字段
SO:黑莓 - 如何创建子菜单?
SO:黑莓 - 如何以编程方式显示带表情符号的标签?
SO:黑莓 - 以编程方式显示输入模式指示器
SO:黑莓-在屏幕上绘制图像
SO:Blackberry-背景图像/动画RIM OS 4.5.0
SO:黑莓-带动画的加载屏幕
SO:如何在Blackberry Storm中设置抗锯齿?
SO:Blackberry设置剪辑区域/区域
SO:在BlackBerry中使用Bitmap还是EncodedImage更好?
SO:黑莓-字段布局动画
无线:更改 BlackBerry 应用程序中的字体
开发人员日志:字体
SO:如何为黑莓应用程序创建自定义字体
SO:如何在 Blackberry 中将字体设置为 LabelField 文本?
SO:如何使 Blackberry UI 更具吸引力?
SO:如何动态更改黑莓标签字段的字体颜色?
SO:BlackBerry - Unicode 文本显示
已删除失效的ImageShack链接 - 切割的媒体应用程序
已删除失效的ImageShack链接 - 切割的图片
使用ButtonField扩展将图像映射到按钮:
class BitmapButtonField extends ButtonField {
Bitmap mNormal;
Bitmap mFocused;
Bitmap mActive;
int mWidth;
int mHeight;
public BitmapButtonField(Bitmap normal, Bitmap focused,
Bitmap active) {
super(CONSUME_CLICK);
mNormal = normal;
mFocused = focused;
mActive = active;
mWidth = mNormal.getWidth();
mHeight = mNormal.getHeight();
setMargin(0, 0, 0, 0);
setPadding(0, 0, 0, 0);
setBorder(BorderFactory
.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
setBorder(VISUAL_STATE_ACTIVE, BorderFactory
.createSimpleBorder(new XYEdges(0, 0, 0, 0)));
}
protected void paint(Graphics graphics) {
Bitmap bitmap = null;
switch (getVisualState()) {
case VISUAL_STATE_NORMAL:
bitmap = mNormal;
break;
case VISUAL_STATE_FOCUS:
bitmap = mFocused;
break;
case VISUAL_STATE_ACTIVE:
bitmap = mActive;
break;
default:
bitmap = mNormal;
}
graphics.drawBitmap(0, 0, bitmap.getWidth(), bitmap.getHeight(),
bitmap, 0, 0);
}
public int getPreferredWidth() {
return mWidth;
}
public int getPreferredHeight() {
return mHeight;
}
protected void layout(int width, int height) {
setExtent(mWidth, mHeight);
}
}
代码的其余部分:
class Scr extends MainScreen implements FieldChangeListener {
Bitmap mBmpHeader = Bitmap.getBitmapResource("header.png");
Bitmap mBmpCover = Bitmap.getBitmapResource("cover.png");
Bitmap mBmpTitle = Bitmap.getBitmapResource("title.png");
Bitmap mBmpTimeline = Bitmap.getBitmapResource("timeline.png");
Bitmap mBmpLeftside = Bitmap.getBitmapResource("leftside.png");
Bitmap mBmpPrevNrm = Bitmap.getBitmapResource("btn_prev_normal.png");
Bitmap mBmpPlayNrm = Bitmap.getBitmapResource("btn_play_normal.png");
Bitmap mBmpPauseNrm = Bitmap.getBitmapResource("btn_pause_normal.png");
Bitmap mBmpStopNrm = Bitmap.getBitmapResource("btn_stop_normal.png");
Bitmap mBmpNextNrm = Bitmap.getBitmapResource("btn_next_normal.png");
Bitmap mBmpPrevFcs = Bitmap.getBitmapResource("btn_prev_focused.png");
Bitmap mBmpPlayFcs = Bitmap.getBitmapResource("btn_play_focused.png");
Bitmap mBmpPauseFcs = Bitmap.getBitmapResource("btn_pause_focused.png");
Bitmap mBmpStopFcs = Bitmap.getBitmapResource("btn_stop_focused.png");
Bitmap mBmpNextFcs = Bitmap.getBitmapResource("btn_next_focused.png");
Bitmap mBmpRightside = Bitmap.getBitmapResource("rightside.png");
VerticalFieldManager mMainManager;
HorizontalFieldManager mHeaderManager;
HorizontalFieldManager mCoverManager;
HorizontalFieldManager mTitleManager;
HorizontalFieldManager mTimelineManager;
HorizontalFieldManager mToolbarManager;
BitmapField mHeader;
BitmapField mCover;
BitmapField mTitle;
BitmapField mTimeline;
BitmapField mLeftside;
BitmapField mRightside;
BitmapButtonField mBtnPrev;
BitmapButtonField mBtnPlay;
BitmapButtonField mBtnPause;
BitmapButtonField mBtnStop;
BitmapButtonField mBtnNext;
public Scr() {
add(mMainManager = new VerticalFieldManager());
addHeader();
addCover();
addTitle();
addTimeline();
addToolbar();
}
private void addHeader() {
mMainManager.add(mHeaderManager = new HorizontalFieldManager());
mHeaderManager.add(mHeader = new BitmapField(mBmpHeader));
}
private void addCover() {
mMainManager.add(mCoverManager = new HorizontalFieldManager());
mCoverManager.add(mCover = new BitmapField(mBmpCover));
}
private void addTitle() {
mMainManager.add(mTitleManager = new HorizontalFieldManager());
mTitleManager.add(mTitle = new BitmapField(mBmpTitle));
}
private void addTimeline() {
mMainManager.add(mTimelineManager = new HorizontalFieldManager());
mTimelineManager.add(mTimeline = new BitmapField(mBmpTimeline));
}
private void addToolbar() {
mMainManager.add(mToolbarManager = new HorizontalFieldManager());
mToolbarManager.add(mLeftside = new BitmapField(mBmpLeftside));
mToolbarManager.add(mBtnPrev = new BitmapButtonField(mBmpPrevNrm,
mBmpPrevFcs, mBmpPrevFcs));
mToolbarManager.add(mBtnPlay = new BitmapButtonField(mBmpPlayNrm,
mBmpPlayFcs, mBmpPlayFcs));
mBtnPlay.setChangeListener(this);
mBtnPause = new BitmapButtonField(mBmpPauseNrm, mBmpPauseFcs,
mBmpPauseFcs);
mBtnPause.setChangeListener(this);
mToolbarManager.add(mBtnStop = new BitmapButtonField(mBmpStopNrm,
mBmpStopFcs, mBmpStopFcs));
mToolbarManager.add(mBtnNext = new BitmapButtonField(mBmpNextNrm,
mBmpNextFcs, mBmpNextFcs));
mToolbarManager.add(mRightside = new BitmapField(mBmpRightside));
}
public void fieldChanged(Field field, int context) {
if (mBtnPlay == field)
play();
else if (mBtnPause == field)
pause();
}
private void pause() {
mToolbarManager.replace(mBtnPause, mBtnPlay);
}
private void play() {
mToolbarManager.replace(mBtnPlay, mBtnPause);
}
}