Прокрутка не будет двигаться

У меня есть форма LWUIT, которая содержит список, в список добавлен ряд элементов, сами элементы представляют собой строки (я хочу сделать их как операторы).

возвращается

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

Все form.setScrollableY(true), form.setScrollabelX(true) и form.setScrollable(true).

это код

import javax.microedition.midlet.*;
import com.sun.lwuit.layouts.*;
import com.sun.lwuit.*;

public class HelloLWUITMidlet3 extends MIDlet
{

  public void startApp()
  {
     com.sun.lwuit.Display.init(this);

     final com.sun.lwuit.Form form = new com.sun.lwuit.Form("");

     final com.sun.lwuit.List l = new com.sun.lwuit.List();

     l.addItem("MY favourite Science is computer Sciences");

     l.addItem("MY favourite   computer Science  subject is programming");

     l.addItem("MY favourite  programming language is java ");

     form.setScrollableY(true);

     form.setScrollableX(true);

     form.addComponent(l);

     form.show( );  
  }

  public void pauseApp()
  {

  }

  public void destroyApp(boolean unconditional)
  {

  }
}

person PHPFan    schedule 02.06.2013    source источник


Ответы (1)


Прежде всего, горизонтальная прокрутка вперед и назад для чтения контента — это действительно плохой UX. Этот ответ решит только проблему вертикальной прокрутки.

Проблема с вашим кодом заключается в том, что вы добавляете прокручиваемый (список) внутри другого прокручиваемого (форма). Это приводит к неожиданным результатам, так как непонятно, какой компонент должен обрабатывать прокрутку. Это можно исправить, используя BorderLayout в форме и поместив список в центр.

...
form.setScrollable(false);
form.setLayout(new BorderLayout());
form.addComponent(BorderLayout.CENTER, l);

...

Это включит вертикальную прокрутку, но горизонтальная прокрутка не будет работать.

Пояснение по поводу прокрутки:

Подход LWUIT к прокрутке основан на фокусе, что означает, что контейнер прокручивается, потому что сфокусированный элемент находится за пределами экрана. Следствием этого является то, что LWUIT не поддерживает элементы прокрутки размером больше экрана и, таким образом, ваш список не будет прокручиваться по горизонтали. (Источник: Мини-часто задаваемые вопросы по LWUIT)

Предложение:

Максимальная высота элемента принимается за высоту компонента в списке. Это делает компонент «Список» адекватным для отображения данных, которые «предварительно отформатированы» определенным образом, например, списки контактов в списке сведений о папке. Если вы хотите складывать фрагменты текста переменной длины, вам следует
использовать форму с BoxLayoutY и помещать текст в различные области TextAreas.

void startApp() {
    Display.init()
    final Form form = new Form("Title");

    addItem(form, "String..");
    // as many times as you like
    addItem(form, "String..");

    form.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
    form.setScrollableY(true);
    form.show()
}


void addItem(Form f, String s) {
    TextArea t = new TextArea(s);
    t.setGrowByContent(true);
    f.addComponent(t);
}
person igordsm    schedule 13.06.2013