j2me移植

1: 三星S5320屏幕分辯率爲 240*400  但是有一個虛擬鍵盤,高度爲80, 這個虛擬鍵盤是去不掉的, 所以實際的屏幕爲 240*320

    這個手機如果用Canvas開發的話,如果你單獨用setFullScreenMode(true) ,則不會設置全屏, 因此你必須在主界面中設置一個線程,並讓這個線程一直執行setFullScreenMode(true); 纔可以設置全屏.

 

2: 代碼規範: <1>把用到的所有資源,就像Android開發一樣,統統放在一個類中,起名爲ResourceManager.java .

                   <2> 所有的UI設計都用相對座標,以便通用.

                  <3>  當每個Canvas結束的時候,一定要寫一個釋放函數,來釋放資源,並適當用System.gc()回收

 

3: 不同手機鍵值區別,

      <1>  NOKIA 的鍵值是比較規範的,幾乎所有的Nokia手機按健都一樣

               public static final int KEY_UP = -1;    
               public static final int KEY_DOWN = -2; 
               public static final int KEY_LEFT = -3;
               public static final int KEY_RIGHT = -4;
               public static final int KEY_FIRE = -5;  // 中間確定鍵
               public static final int KEY_SOFT_LEFT = -6;  // 左軟鍵
               public static final int KEY_SOFT_RIGHT = -7; // 右軟鍵

 

     <2> MOTO  E2, V8  的手機銨鍵:

            public static final int KEY_UP = -1;
            public static final int KEY_DOWN = -2;
            public static final int KEY_LEFT = -3;
            public static final int KEY_RIGHT = -4;
             public static final int KEY_FIRE = -5;
             public static final int KEY_SOFT_LEFT = -21; // 左軟鍵
             public static final int KEY_SOFT_RIGHT = -22;  // 右軟鍵

 

 

    <3> MOTO E398 ; L7 --- Key Code
             public static final int KEY_UP = -1;
             public static final int KEY_DOWN = -6;
             public static final int KEY_LEFT = -2;
            public static final int KEY_RIGHT = -5;
            public static final int KEY_FIRE = -20; // 中間鍵
            public static final int KEY_SOFT_LEFT = -21; // 左軟鍵
            public static final int KEY_SOFT_RIGHT = -22; // 右軟鍵

 

 

   <4>  其它按鍵

 

           public static final int KEY_0 = 48;
           public static final int KEY_1 = 49;
           public static final int KEY_2 = 50;
            public static final int KEY_3 = 51;
            public static final int KEY_4 = 52;
            public static final int KEY_5 = 53;
           public static final int KEY_6 = 54;
           public static final int KEY_7 = 55;
           public static final int KEY_8 = 56;
           public static final int KEY_9 = 57;
            public static final int KEY_POUND = 35;
            public static final int KEY_STAR = 42;

 

 

4:   <1> 除法用    >>>1       ,乘法用    <<1    . 而不是用 /2 ,*2等方法

 

 

 

5: 目前的疑難問題, 

 

   <1>: Moto E6 手機,當程序調用系統瀏覽器後,返回的程序的時候, 程序不能全屏,我做過以下處理

 

           在ShowNotify() 方法中用  setFullScreenMode(true);

           在主界面中設置一個線程,讓線程不斷循環執行setFullScreenMode(true);

           在sizeChanged(int w,int h)  設置 setFullScreenMode(true)/

 

 

         我用以上方法都不行,不知道那位高手知道,到底怎麼弄?

 

 

補充一下: 這個問題的解決方法:

 

     在主界面設置一個boolean keyIsValide

 

     當調用瀏覽器的時候,這個keyIsValide被設置成false ,也就是說瀏覽器返回的時候第一次觸摸鍵不管用,

    當瀏覽器返回時,用戶第一次觸摸屏幕的時候,再把 keyIsValide=true,回到原始狀態,這時候屏幕也就全屏了。

 

 

   <2>  : 對Nokia S40的手機,  比如5300:

         因爲系統的原因, 單任務,  當你在調用 platformRequest(String URL)  ,來調用系統瀏覽器的話,這時程序會在後臺響應,調用系統瀏覽器,但不會顯示出來,只有當你退你應用程序的時候,瀏覽器纔會出來  (挺鬱悶!)

 

   解決方法:    看j2me的API ,,,發現  platformRequest(String URL)  會返回一個boolean 值

 

       此方法, 當返回  true的時候, 就是說,需要程序退出,   false: 程序不需退出,支持多任務

 

       那麼就可以這樣判斷:   boolean isExist=platformRequest(String Url)

      當返回true的時候,就結束我們的應用程序, 來顯示瀏覽器.

 

 

  <3> 對於Nokia S40比如5300 還有連續按鍵的問題

         當從高級界面切換到低級界面的時候, 在高級界面按  "返回"  鍵時, 就會觸發低級界面的 "返回鍵"

 

       解決方法: 

            在低級界面定義一個  boolean  isKeyValide=false;

            在 showNotify() 方法中  用一個線程暫停 300毫秒, 然後改變爲 isKeyValide=true;

 

          在   keyPressed(int keyCode)  方法中 做一個判斷

          if(! isKeyValide) {

              return;

          }

 

       當isKeyValide爲false的時候,不作任何處理,,直接返回!, 這樣就可以解決了.

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章