motofan logo
       
> 

Проблемы портирования под Моторолу, софт-клавиши, смена displayable

Vladimir35
сообщение 10.8.2005, 20:29


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 29.7.2005
Пользователь №: 47 315
Модель телефона: SEk700
Прошивка: R4

Рейтинг: 0



При портировании MIDP2.0 приложения(работающего на Нокия, СониЕрикссон) на Моторолу воникли
следующие проблемы:

1. Не соответствие кодов софт клавиш. В программе произвели следующую замену:
private final static int KEY_SOFTKEY1= -6 ----> -21
private final static int KEY_SOFTKEY2= -7 ----> -22

Вопрос: будет ли это работать на всех Моторолах, или только на определенных моделях?
В эмуляторе такая замена работает на всех моделях?!

2. При тестировании возникла следующая проблема(отсутствующая на Нокии и СониЕрикссон):

Допустим есть два объекта displayable
- form с двумя коммандами,
- canvas с обработкой софт клавиш.

Желаемая логика: пользователь находиться на канве, жмет софт-клавишу -> попадает в form

Проблема: пользователь находится на канве, жмет софт-клавишу -> попадает в form ->сразу же вызывается комманда, привязанная к софт-клавише, на которую нажал пользователь.

Смена displayable - стандартная setCurrentDisplay(displayable) по нажатию на софт-клавишу.

Вопрос: в чем тут дело? Глюк эмулятора?

3. Какой набор встроенных шрифтов стандартен?
Например, на СониЕрикссон есть только пропорциональные шрифты, три размера,
латиница - жирная, курсив, подчеркнутая
кирилица - жирная, подчеркнутая.


Спасибо за вашу помощь.

С уважением,
Владимир.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 11.8.2005, 4:46


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



коды клавиш keyCode для мотора (C380/650, E398, V535, больше не тестил сам, на других возможны положительные значения):
public static final int E398_MENU_SOFT_KEY = -23;
public static final int E398_LEFT_SOFT_KEY = -21;
public static final int E398_RIGHT_SOFT_KEY = -22;
public static final int E398_UP_KEY = -1;
public static final int E398_DOWN_KEY = -6;
public static final int E398_LEFT_KEY = -2;
public static final int E398_RIGHT_KEY = -5;
public static final int E398_FIRE_KEY = -20;
public static final int E398_STAR_KEY = 42;
public static final int E398_HASH_KEY = 35;
есть же замечательный метод у Canvas: getGameAction(int keyCode), которому нас...ть какая труба
Цитата(Vladimir35 @ Среда, 10 Августа 2005, 20:29)
Проблема: пользователь находится на канве, жмет софт-клавишу -> попадает в form ->сразу же вызывается комманда, привязанная к софт-клавише, на которую нажал пользователь.
Смена displayable - стандартная setCurrentDisplay(displayable) по нажатию на софт-клавишу.
*


Есть такая фигня, я решал ее так: вызов setCurrent(form) делал не в keyPressed(int keyCode) у Canvas, а в keyReleased(int keyCode)
Цитата(Vladimir35 @ Среда, 10 Августа 2005, 20:29)
Какой набор встроенных шрифтов стандартен?
*


Насколько я помню (лень сейчас проверять) на E398 пофигу какой шрифт ты создаешь, т.е. Font.getFont(int face, int style, int size) по-барабану FACE_MONOSPACE, FACE_PROPORTIONAL, FACE_SYSTEM, SIZE_LARGE, SIZE_MEDIUM, SIZE_MEDIUM, STYLE_BOLD, STYLE_BOLD, STYLE_PLAIN, STYLE_UNDERLINED, получается всегда один и тот же (а может я и ошибаюсь, не помню). Есть у Font метод Font.getDefaultFont(), дальше можешь вызвать getSize(), getStyle(), isBold(), isItalic(), isPlain(), isUnderlined() и узнаешь параметры фонта по дефаулту.

Короче возьми хелп по MIDP и не парься :-)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vladimir35
сообщение 11.8.2005, 7:43


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 29.7.2005
Пользователь №: 47 315
Модель телефона: SEk700
Прошивка: R4

Рейтинг: 0



Спасибо за помошь, grafmoto!
Цитата(grafmoto @ Четверг, 11 Августа 2005, 7:46)
есть же замечательный метод у Canvas: getGameAction(int keyCode), которому нас...ть какая труба

Дело в том, что, насколько мне известно, getGameAction(int keyCode) не работает с софт-клавишами. Более того, на Нокии и СониЕриксон вызывает исключение, которое, кстати, в случае не обработки, заводит многих новичков в тупик.

Цитата
Есть такая фигня, я решал ее так: вызов setCurrent(form) делал не в keyPressed(int keyCode) у Canvas, а в keyReleased(int keyCode)

Вот за это - спасибо - ответ, то что нужно. Вопрос: а что вы еще обрабатываете при отпускании кнопки?(дело в том, что я никогда раньше не использовал keyReleased...)

Цитата
Насколько я помню (лень сейчас проверять) на E398 пофигу какой шрифт ты создаешь...

Ответьте, пожалуйста, на еще один вопрос - насколько хорошо эмулятор воспроизводит шрифты телефона? Например, как мне показалось, RAZR имеет все необходимые шрифты.

Цитата
Короче возьми хелп по MIDP и не парься :-)

Взял хелп, попарился, и вот что получилось - берем текстовый файл, форматируем html-подобными тэгами, и, вот результат:
Изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Stranger
сообщение 11.8.2005, 20:07


Опытный
***

Группа: Почётные мотофаны
Сообщений: 135
Регистрация: 4.7.2005
Из: Донецк,Украина
Пользователь №: 45 406
Модель телефона: E60, E398
Прошивка: 49r

Рейтинг: 116



Цитата(Vladimir35 @ Четверг, 11 Августа 2005, 10:43)
Спасибо за помошь, grafmoto!

Дело в том, что, насколько мне известно, getGameAction(int keyCode) не работает с софт-клавишами. Более того, на Нокии и СониЕриксон вызывает исключение, которое, кстати, в случае не обработки, заводит многих новичков в тупик.
Вот за это - спасибо - ответ, то что нужно. Вопрос: а что вы еще обрабатываете при отпускании кнопки?(дело в том, что я никогда раньше не использовал keyReleased...)
Ответьте, пожалуйста, на еще один вопрос - насколько хорошо эмулятор воспроизводит шрифты телефона? Например,  как мне показалось, RAZR имеет все необходимые шрифты.
Взял хелп, попарился, и вот что получилось - берем текстовый файл, форматируем html-подобными тэгами, и, вот результат:
Изображение
*


Щрифты вообще никак не поддерживаются телефонами Моторола и прав был Grafmoto, когда говорил, что телефону пофиг, какой стиль оного ты выставляешь. Единственный выход в отображении текста разными шрифтами - рисовать его!!! :)
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vladimir35
сообщение 12.8.2005, 8:39


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 29.7.2005
Пользователь №: 47 315
Модель телефона: SEk700
Прошивка: R4

Рейтинг: 0



По поводу срабатывания команды в displayable1, назначенной на софт клавишу, которой вызывается displayable1 - предложенный Grafmoto способ переноса обработчика из keyPressed в keyReleased - этот метод работает на "старых" моторолах - на "новых" - происходит "двойное нажатие".

Например, на страрых прошивках Razr - работает, на новых нет.


Цитата
Щрифты вообще никак не поддерживаются телефонами Моторола и прав был Grafmoto, когда говорил, что телефону пофиг, какой стиль оного ты выставляешь

Я должен был сразу эту картинку вставить: что это - глюк эмулятора?
Изображение
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
grafmoto
сообщение 12.8.2005, 11:36


ЯваМотоКодер
********

Группа: Почётные мотофаны
Сообщений: 2 003
Регистрация: 15.10.2004
Из: Северодвинск
Пользователь №: 16 752
Модель телефона: iPhone 3Gs
Прошивка: iOS 6.1.3

Рейтинг: 703



Цитата(Vladimir35 @ Пятница, 12 Августа 2005, 8:39)
этот метод работает на "старых" моторолах - на "новых" - происходит "двойное нажатие".
*


бр, бр, бр.
setCurrent(form) нужно вызывать только в одном обработчике - keyReleased, тогда никакого двойного нажатия не будет, см. source phonemanager или lightplayer.
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Vladimir35
сообщение 15.8.2005, 12:29


Новичок
*

Группа: Пользователи
Сообщений: 6
Регистрация: 29.7.2005
Пользователь №: 47 315
Модель телефона: SEk700
Прошивка: R4

Рейтинг: 0



Цитата(grafmoto @ Пятница, 12 Августа 2005, 14:36)
setCurrent(form) нужно вызывать только в одном обработчике - keyReleased, тогда никакого двойного нажатия не будет, см. source phonemanager или lightplayer.
*


А что вы думаете я делаю? Именно так все и делаю. Исходники не нашел, где их взять?

Вот простой код, который работает на RAZR_V3b и не работает на RAZR_V3i
Код

//main.java
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class main extends MIDlet implements CommandListener
{
   private mScreen splashScreen;
   Display display;
   private List mainMenu;
   private boolean firstTime;

   private final static Command CMD_EXIT = new Command("Exit", Command.EXIT, 1);
   private final static Command CMD_BACK = new Command("Back", Command.BACK, 1);

   public main()
   {
     display=Display.getDisplay(this);
     splashScreen = new mScreen(this);      
     String[] sMain = {  "Help","About"};
     mainMenu = new List("Main Menu", Choice.IMPLICIT, sMain, null);
     mainMenu.addCommand(CMD_BACK);
     mainMenu.addCommand(CMD_EXIT);
     mainMenu.setCommandListener(this);
     firstTime = true;
   }

   public void startApp()
   {
     if (firstTime)
     {
       display.setCurrent(splashScreen);
       firstTime = false;
     }
   }
   public void pauseApp()
   {}
   public void destroyApp(boolean unconditional)
   {}
   public void doQuit()
   {
     destroyApp(false);
     notifyDestroyed();
   }

 public void commandAction(Command c, Displayable d)
 {
   if (c == CMD_EXIT)
     doQuit();
   else
   if(c == CMD_BACK)
     display.setCurrent(splashScreen);
 }

 public void getToMenu()
 {
   display.setCurrent(mainMenu);
 }
}
/* end of file main.java*/

//mScreen.java
import java.util.*;
import java.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.rms.*;
import javax.microedition.media.*;

class mScreen extends Canvas
{
 private final static int KEY_SOFTKEY1=-21;
 private final static int KEY_SOFTKEY2=-22;
 private final static int E_SOFTKEY1=21;
 private final static int E_SOFTKEY2=22;

 private main parentMidlet;

 public mScreen(main parMidlet)
 {
   parentMidlet=parMidlet;
 }
 public void paint(Graphics g)
 {
       g.setColor(0);
       g.fillRect(0, 0, getWidth(), getHeight());
       g.setColor(0xffffff);
       g.drawString("Press softkey to get to menu",1,1,0);
 }
 protected void keyReleased(int keyCode)
 {
       switch (keyCode)
       {
         case KEY_SOFTKEY1:
         case KEY_SOFTKEY2:
         case E_SOFTKEY1:
         case E_SOFTKEY2:
           parentMidlet.getToMenu();
           break;
       }
 }
}
/* end of file mScreen.java*/
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить
Проблемы портирования под Моторолу, софт-клавиши, смена displayable · Разработка Java-приложений · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 3.8.2025, 15:58

Форум живёт: