Обернуть элемент списка автозаполнения поля - PullRequest
0 голосов
/ 25 января 2012

В моих приложениях есть AutoCompleteField, который содержит длинный текст длиной более 100 символов. Если я использую обычный AutoCompleteField, я не могу прочитать остальные данные.

Cant read the rest item description

Как сделать текстпереносить в 2 или более строк в параметрах автозаполнения?Я пытаюсь использовать '\ r' + '\ n' и '\ n', это не дает новую строку.установка его размера, а также установка высоты строки не дает мне желаемого результата

AutoCompleteField autoCustomer = new AutoCompleteField(custList, style);
autoCustomer.getListField().setSize(20);
autoCustomer.getListField().setRowHeight(100);

1 Ответ

0 голосов
/ 25 января 2012

Если бы я был вами, я бы переопределил drawListRow и нарисовал бы текст, используя drawText, что даст мне полный контроль над тем, как должна выглядеть строка. Попробуйте адаптировать свой код так, чтобы он вел себя так

AutoCompleteField autoCompleteField = new AutoCompleteField(
                filterList, AutoCompleteField.LIST_STATIC) {

            public void drawListRow(ListField listField, Graphics g,
                    int index, int y, int width) {

        BasicFilteredListResult result = (BasicFilteredListResult) (autoCompleteField
                .get(listField, index));
        if (result != null) 
        {
                          //Draw text here
        }
            }

            public void onSelect(Object selection, int type) {
                super.onSelect(selection, type);
                if (selection != null) {

                    BasicFilteredListResult result = (BasicFilteredListResult) this
                            .getSelectedObject();
                    handleResult((String) result._object);

                } else {
                    Dialog.alert(Resource
                            .getString(PLEASE_PICK_A_VALID_NAME));
                    return;
                }
            }
        };

Если вы хотите обернуть текст, вы можете использовать следующий метод

// Handy method to wrap text drawn with the specified font into rows with
// the max width
// Found here:
// http://supportforums.blackberry.com/t5/Java-Development/Can-drawText-wrap-text-into-multiple-lines/m-p/499901
public static String[] wrapText(String text, Font f, int maxWidth) {
    Vector result = new Vector();
    if (text == null)
        return new String[] {};

    boolean hasMore = true;

    // The current index of the cursor
    int current = 0;

    // The next line break index
    int lineBreak = -1;

    // The space after line break
    int nextSpace = -1;

    while (hasMore) {
        // Find the line break
        while (true) {
            lineBreak = nextSpace;
            if (lineBreak == text.length() - 1) {
                // We have reached the last line
                hasMore = false;
                break;
            }
            nextSpace = text.indexOf(' ', lineBreak + 1);
            if (nextSpace == -1)
                nextSpace = text.length() - 1;
            int linewidth = f
                    .getAdvance(text, current, nextSpace - current);
            // If too long, break out of the find loop
            if (linewidth > maxWidth)
                break;
        }
        String line = text.substring(current, lineBreak + 1);
        result.addElement(line);
        current = lineBreak + 1;
    }
    String[] resultArray = new String[result.size()];
    result.copyInto(resultArray);
    return resultArray;
}
...