天天看點

FullCanvas與Canvas全屏模式真機使用分析

FullCanvas是NOKIA所創造的擴充包中的類,其可以替換掉MIDP2.0中Canvas,并直接提供了全屏實作,并且相比與MIDP中的CANVAS做了一些NOKIA機型所支援的特殊操作,處理。本文主要讨論兩種實作全屏的方式在各類機型中的真實表現,并對大家做機型擴充時的選擇有所幫助。

首先目前主要有兩大廠商對FullCanvas提供了支援,分别為NOKIA和索愛.但索愛對FullCanvas的支援不是很好,在模拟器上不會出現問題,但在真機中會出現取不到正确的全屏高度,這個在索愛大屏(240*320)的機型中特别明顯,如果你使用getHeight()的方式來擷取高度再進行計算繪制的話,那繪制出來的界面就不是全屏的了,而索愛對MIDP2.0中的全屏方式支援是OK的。

而NOKIA對FullCanvas的支援就很好,不會出現這樣的問題,但NOKIA對MIDP 2.0 Canvas的全屏實作方式setFullScreenMode(true)支援很差,在S60的機型中會出現不能同步取到正确全屏高度,而擷取到的是非全屏高度。

而MOTO的機型不支援FULLCANVAS,并且對MIDP 2.0 的CANVAS 的全屏方式也支援的很差,同樣不能保證能同步取到正确的全屏高度,這個在V3,E398這些機型中幾乎是100%有這個問題,而E680這些機型就不會有這些問題。

要解決這種問題,當然最直接的就是寫死全屏高度,并且以後的坐标計算都使用這個高度進行計算,不要使用getHeight(),但如果你想做一個自适應的UI設計這種方式就不适用了。

我們從上面的分析可以知道NOKIA對FullCanvas支援很好,索愛對MIDP 2.0的全屏方式支援很好,那我們做自适應的UI版本是就可以索愛的使用MIDP2.0的方式,而NOKIA的使用FullCanvas,這樣至少可以保證NOKIA和索愛機型實作自适應。而MOTO的話,在V3.E398機型中隻能寫死高度了,通常都是在擷取的高度加21或22的高度來實作全屏。

  通過這兩種方式在不同機型的實作情況,可以看出各種機型對J2ME的支援都不統一規範,甚至對MIDP2.0的标準都不能完全規範實作。我們在做多個版本時隻能根據他們的特性進行區分實作了,而這也增加了我們程式開發和後期版本管理的複雜度(一個自适應的程式都必須至少要有3種包)。