Blackberry - Пользовательский курсор EditField - PullRequest
2 голосов
/ 18 апреля 2010

Я создаю окно поиска для своего проекта BlackBerry, но похоже, что у BlackBerry нет API для создания одной строки EditField. Я создал настраиваемое поле, расширив BasicEditField и переопределив методы, такие как макет и рисование. В теле функции paint я рисую прямоугольник с помощью getPreferredWidth () и getPreferredHeight (). Но курсор появляется в верхней левой позиции по умолчанию в EditField. Кто-нибудь может сказать мне, как я могу нарисовать курсор, где мой текст? то есть в середине EditField, вызывая drawText ().

Ответы [ 4 ]

4 голосов
/ 19 апреля 2010

Я не получаю ваш вопрос, но.

  1. Вы можете создать поле редактирования в одну строку.

    BasicEditField editField = new BasicEditField (BasicEditField.NO_NEWLINE);

  2. Вы можете установить положение курсора.

    editField.setCursorPosition (смещение);

3 голосов
/ 29 апреля 2010

Вы можете нарисовать курсор там, где хотите переписать метод onFocus в editField.

        protected void onFocus(int direction) {
            super.onFocus(direction);
            this.setCursorPosition(this.getTextLength());
            invalidate();
        }

После получения Фокуса поле будет располагать курсор в конце текста. EditField имеет setCursorPosition, а также getTextLength.

Надеюсь, это поможет.

2 голосов
/ 30 апреля 2010

Спасибо, ребята, я получил одно прекрасное решение от Blackberry Journal.

public class ScrollingSearchBox extends HorizontalFieldManager
{
    private int managerWidth;
    private int managerHeight;
    public ScrollingSearchBox()
    {
        super(Manager.NO_HORIZONTAL_SCROLL);
        searchEdit = new BasicEditField(){
            public int getPreferredHeight()
            {                 
                return ret;
            }
            public int getPreferredWidth()
            {                    
                return ret;
            }
            public void paint(Graphics g)
            {
                getManager().invalidate();
                super.paint(g);                    
            }
        };

        HorizontalFieldManager hfm = new HorizontalFieldManager(Manager.HORIZONTAL_SCROLL)
        {
            public void sublayout(int width, int height)
            {
                if (managerWidth == 0) {
                    managerWidth = searchEdit.getPreferredWidth();
                }
                if (managerHeight == 0) {
                    managerHeight = searchEdit.getPreferredHeight();
                }
                super.sublayout(managerWidth, managerHeight);
                setExtent(managerWidth,managerHeight);
            }
            public void paint(Graphics g) {
                super.paint(g);
            }
        };
        searchEdit.setMaxSize(70);
        hfm.add(searchEdit);
        add(hfm);
    }

    public int getPreferredHeight()
    {
        int ret = 0;            
        return ret;
    }
    protected void sublayout(int maxWidth, int maxHeight)
    {
        int currX = 0;
        int currY = 0;
        Field currField;

        currField = this.getField(0);
        switch (ScreenConfig.getInstance().getScreen())
        {
            case ScreenConfig.SCREEN_320_240:
            currX = 5;
            currY = 3;
            break;
            case ScreenConfig.SCREEN_480_360:
            case ScreenConfig.SCREEN_480_320:
            currX = 5;
            currY = 1;
            break;
        }
        this.setPositionChild(currField, currX, currY);
        this.layoutChild(currField, currField.getPreferredWidth(),
        currField.getPreferredHeight());
        setExtent(this.getPreferredWidth(), this.getPreferredHeight());
    }

    protected void paint(Graphics graphics)
    {
        super.paint(graphics);
        graphics.drawRect(0, 0, this.getPreferredWidth(), this.getPreferredHeight());
    }
} 

Я даю это, чтобы оно могло помочь другим. Продолжайте делиться своими кодами. Спасибо.

1 голос
/ 27 мая 2011

Если вы хотите удалить курсор, вы можете переопределить drawFocus of Field.

protected void drawFocus(Graphics graphics, boolean on) {} // remove cursor
...