我已经实现了一些自定义字段,并希望保持与当前黑莓主题的外观一致。所以我希望字段的突出显示颜色与整个 BB 应用程序中使用的突出显示颜色一致。
我怎样才能得到这个颜色?
编辑:显然,没有办法从任何 API 获得这些颜色。那么有没有一种变通方法来获得这些颜色?
我已经实现了一些自定义字段,并希望保持与当前黑莓主题的外观一致。所以我希望字段的突出显示颜色与整个 BB 应用程序中使用的突出显示颜色一致。
我怎样才能得到这个颜色?
编辑:显然,没有办法从任何 API 获得这些颜色。那么有没有一种变通方法来获得这些颜色?
我们可以做的是在一些自定义文本字段的 drawFocus 方法上测试颜色:
class TestField extends TextField {
TestThemeListener mListener;
public TestField(TestThemeListener listener) {
super(EDITABLE | FOCUSABLE);
setText("Hello this is a color test");
setSelection(0, true, 10);
mListener = listener;
}
protected void drawFocus(Graphics g, boolean on) {
drawHighlightRegion(g, HIGHLIGHT_FOCUS, true, 0, 0, 50, 20);
Bitmap bmp = new Bitmap(50, 20);
Display.screenshot(bmp, 0, 0, 50, 20);
int[] argbData = new int[1];
bmp.getARGB(argbData, 0, 1, 0, 0, 1, 1);
int focusColor = argbData[0];
drawHighlightRegion(g, HIGHLIGHT_SELECT, true, 50, 0, 50, 20);
Display.screenshot(bmp, 50, 0, 50, 20);
argbData = new int[1];
bmp.getARGB(argbData, 0, 1, 0, 0, 1, 1);
int selectionColor = argbData[0];
if (null != mListener) {
mListener.themeTested(focusColor, selectionColor);
mListener = null;
}
}
}
interface TestThemeListener {
void themeTested(int focusColor, int selectionColor);
}
并在屏幕上使用它:
class Scr extends MainScreen implements TestThemeListener {
LabelField mSelectionColorName;
LabelField mFocusColorName;
public Scr() {
add(new TestField(this));
}
public void themeTested(int focusColor, int selectionColor) {
add(new LabelField("Theme colors (AARRGGBB)"));
add(new LabelField("Focus : " + focusColor));
Bitmap bmpF = new Bitmap(100, 20);
Graphics gF = new Graphics(bmpF);
gF.setColor(focusColor);
gF.fillRect(0, 0, 100, 20);
add(new BitmapField(bmpF));
add(new LabelField("Selection : " + selectionColor));
Bitmap bmpS = new Bitmap(100, 20);
Graphics gS = new Graphics(bmpS);
gS.setColor(selectionColor);
gS.fillRect(0, 0, 100, 20);
add(new BitmapField(bmpS));
}
}
颜色测试应用程序截图 http://img188.imageshack.us/img188/8943/830001.png
这工作正常,但有一个问题。必须对应用程序进行签名,并向用户显示截屏的确认信息,例如“应用程序 xxx 想要截屏。允许吗?” 这对用户来说可能很烦人。这是由在设备类中使用安全 API 引起的。
相反,尝试Graphics
从 a创建一个新的Bitmap
,然后在它上面绘制。
class TestField : extends Field {
int getHighlightColor() {
Bitmap image = new Bitmap(getWidth(), getHeight());
Graphics g = new Graphics(image).
drawHighlightRegion(g, Field.HIGHLIGHT_FOCUS, true, 0, 0, getWidth(), getHeight());
paint(
argbData = new int[1];
image.getARGB(argbData, 0, 1, 0, 0, 1, 1);
return argbData[0];
}
}