Как предотвратить прокрутку в одном направлении в HorizontalFieldManager? - PullRequest
0 голосов
/ 14 апреля 2011

У меня есть требование для однострочного поля редактирования, которое может принимать текст длиннее ширины поля редактирования (например, «обычное» текстовое поле Windows).

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

Это работает в одном смысле: если я набираю текст длиннее ширины поля редактирования, HFM автоматически прокручивается влево (взяв с собой поле редактирования), при котором курсор остается видимым справа.

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

1 Ответ

1 голос
/ 14 апреля 2011

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

EditField edit = new EditField(EditField.NO_NEWLINE | style) {

        protected void fieldChangeNotify(int context) {
            try{
                super.fieldChangeNotify(context);
                setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight());
            }
            catch(Exception e){
                //don't recall why I needed this, but it works so I'm hesitant to remove it
            }

        }
        protected void layout(int width, int height) {
            super.layout(width, height);
            setExtent(this.getFont().getAdvance(this.getText()) + 10, this.getHeight());
        }
    };

То, что это будет делать, постепенно расширяет поле EditField по мере роста текста.У меня было это внутри HFM, которое росло вместе с ним, но вам это может не понадобиться.Я сделал это потому, что если поле стало шире, чем ширина экрана, а не прокручивал весь экран, вы могли бы позволить этому одному полю прокручиваться горизонтально.Кроме того, + 10 там, потому что он обрезал курсор без него.Если вам это тоже понравится, я могу отредактировать этот пост, чтобы включить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...