2012-02-01 2 views
0

Я пытаюсь использовать собственные компоненты в приложении LWUIT на платформе Android.IllegalArgumentException при использовании собственного компонента Android в LWUIT

private Component createNativeTextEdit() { 
    final Object[] result = new Object[1]; 

    AndroidImplementation.runOnAndroidUIThreadAndWait(LWUITActivity.currentActivity, new Runnable() { 
     @Override 
     public void run() { 
      EditText nativeView = new EditText(LWUITActivity.currentActivity); 
      nativeView.setText("Type here.."); 

      result[0] = PeerComponent.create(nativeView); 
     } 
    }); 

    return (Component)result[0]; 
} 

я затем поместить компонент внутри формы:

mMainForm = new Form(); 
mMainForm.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); 

mMainForm.addComponent(createNativeTextEdit()); 

mMainForm.show(); 

Тогда я получаю «IllegalArgumentException: ширина и высота должна быть> 0», когда система пытается привлечь новую форму.

Я проследил проблему до вызова AndroidImplementation.PeerWrapper.getBuffer() и значения, возвращаемые getWidth() и getHeight(), - width = 474 и height = 0.

Как высота должна быть установлена? Что мне не хватает?

Знаете ли вы, что рабочая программа для примера использует PeerComponent на Android? Я искал в Интернете, но мог найти только некоторые фрагменты, где неясно, откуда вызывается код, какой поток он выполняется и т. Д.

Спасибо.

ответ

1

Я понял вопрос.

Я использую порт LWUIT 1.5 thorsten_s для Android.

Вопрос заключается в том, что компоненты LWUIT вычисляет предпочтительный размер, прежде чем нативный вид добавляется, так как ширина и высота устанавливается в 0.

Путь, чтобы исправить это вызвать View.measure() на PeerWrapper в время создания, чтобы инициализировать его до предпочтительного размера.

Внутри AndroidImplementation.java в конце конструктора класса PeerWrapper добавьте строку:

меру (MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED), MeasureSpec.makeMeasureSpec (0, MeasureSpec.UNSPECIFIED));

Это полностью устраняет проблему. Теперь я могу использовать такие компоненты, как AnalogClock, DatePicker и собственный EditText в формах LWUIT.

0

Такая вещь работает для нас в реализации Codename One. Я не совсем уверен, что происходит в порту Торстен, так как мы в настоящее время сильно раздвоены. Мы намерены выпустить Codename One с демонстрацией собственного доступа, которая продемонстрирует доступ к собственным виджетам.

+0

Спасибо Shai! Есть ли способ, которым я могу взять свой карман в свой порт? К сожалению, мне нужно решение довольно скоро. Благодарю. –

Смежные вопросы