Как получить цвет подсветки текущей темы Blackberry? - PullRequest
2 голосов
/ 21 сентября 2009

Я реализовал некоторые пользовательские поля и хотел бы, чтобы внешний вид соответствовал текущей теме Blackberry. Поэтому я бы хотел, чтобы цвет подсветки полей соответствовал цвету подсветки, используемому в приложениях BB.

Как мне получить этот цвет?

Редактировать: По-видимому, невозможно получить такие цвета из любого API. Так есть ли обходной путь для получения этих цветов?

Ответы [ 2 ]

3 голосов
/ 21 сентября 2009

Что мы можем сделать, это проверить цвета в методе 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

1 голос
/ 03 июня 2012

Это работает нормально, но есть проблема. Приложение должно быть подписано, и оно отображает подтверждение для пользователя, чтобы сделать снимки экрана, такие как «Приложение xxx хочет сделать снимок экрана. Разрешить?» Это может раздражать пользователя. Это вызвано использованием безопасного API в классе устройства.

Вместо этого попробуйте создать новый Graphics из 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];
    }
}
...