Проблема с прокруткой - очень сложно «добраться» до полей внизу экрана - PullRequest
0 голосов
/ 19 ноября 2011

У меня странная проблема: у меня есть экран, который использует VerticalFieldManager по умолчанию .... super (USE_ALL_WIDTH | USE_ALL_HEIGHT);..... посредством чего мы добавляем 24 дополнительных поля.Эти дополнительные поля имеют типы RichTextField, NullField, TextField и ObjectChoiceField.Этот экран представляет собой просто форму CRUD ... для ввода данных для отправки на внутренний сервер.

Что интересно, так это то, что я не могу использовать маленький трекпад (реальное устройство и симулятор 9850 Torch 2's), чтобы перемещаться вниз к полям, которые находятся внизу экрана.Поскольку это сенсорное устройство, я могу «перетащить» экран вверх, чтобы отобразить те поля, которые находятся внизу, но только после отображения виртуальной клавиатуры.

Согласно методу MainManager.getVirtualHeight ()моя виртуальная высота 970 пикселей, а видимая высота 800 (факел 2).Поля, которые находятся ниже начальной «видимой области содержимого» и для которых требуется прокрутка, я не могу использовать трекпад, чтобы поместить фокус в одно из тех текстовых полей, которые находятся ниже нижнего края экрана ..... точкана самом деле, я мог бы поместить фокус там, но экран все еще не прокручивает эти нижние поля вверх, чтобы пользователь мог их видеть.

Это очень простая реализация:

public class GetDataScreen extends MainScreen .....

public GetDataScreen()
{
    super( MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT );

    add( field1 );
    add( field2 );
    ....
    ...
    ..
    .
}

Есть мысли о том, что вызывает это или как это исправить?Для записи я также попытался позвонить:

super( MainScreen.VERTICAL_SCROLL | MainScreen.VERTICAL_SCROLLBAR | MainScreen.USE_ALL_WIDTH | MainScreen.USE_ALL_HEIGHT );

..... в надежде, что это все исправит, но это не имеет никакого значения.

Спасибо

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Ладно .. после большого количества проб и ошибок я что-то сделал (полное отчаяние), и это сработало!Это слишком глупо, и если бы не тот факт, что какой-то другой человек мог иметь такую ​​же проблему, я бы оставил это при себе .....

Я просто создал VerticalFieldManager, который я добавил всеполя, а затем добавил этот VFM на экран.Дело в том, что на самом деле это НЕ должно иметь никакого значения - вообще, поскольку Диспетчером по умолчанию на экране является VFM.Ничего больше.Никаких других свойств не установлено, методы вызываются, события .... nada.

Перейти к рисунку.

1 голос
/ 20 ноября 2011

Я видел эту проблему в OS6 +, когда у вас большие текстовые поля на экране - особенно, когда одно текстовое поле выше, чем сам экран. Если разбить текстовое поле на несколько полей поменьше, это должно помочь.

EDIT:
В качестве альтернативы, вы можете написать свой собственный VerticalFieldManager, который был лучшим решением, которое я использовал. У меня есть некоторые настройки, но расположение ядра не так сложно, как вы думаете. Это не делает выравнивание по левому / правому краю / центру дочерних полей, но вы можете добавить его достаточно легко, если вам это нужно.

public class MyVerticalFieldManager extends Manager {
    protected MyVerticalFieldManager(long style){
        super(
           style |
           ((style & Manager.VERTICAL_SCROLL_MASK) == 0 ? Manager.VERTICAL_SCROLL : 0) |
           ((style & Manager.VERTICAL_SCROLLBAR_MASK) == 0 ? Manager.VERTICAL_SCROLLBAR : 0));
    }

    protected void sublayout(int width, int layoutHeight) {
        int height = Integer.MAX_VALUE;
        int lastY = 0;
        int lastBottomMargin = 0;
        final int fieldCount = this.getFieldCount();
        for(int i = 0; i < fieldCount; i++) {
            Field f = this.getField(i);
            int margin = Math.max(lastBottomMargin, f.getMarginTop());
            final int x = f.getMarginLeft();
            final int y = lastY + margin;
            final int maxWidth = width-(f.getMarginLeft()+f.getMarginRight());
            final int maxHeight = height - y;
            this.layoutChild(f, maxWidth, maxHeight);
            this.setPositionChild(f, x, y);
            lastY = y + f.getHeight();
            lastBottomMargin = f.getMarginBottom();
        }
        this.setVirtualExtent(width, lastY + lastBottomMargin);
        this.setExtent(width, layoutHeight);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...