Nokia SDK 2.0 for Java: 如何实现横竖屏切换
文章信息
Contents |
Introduction
在Nokia SDK 2.0 for Java平台的Series 40手机(Nokia 3050, 3060 等)中首次引入了方向传感器,也提供开发用来侦测,控制程序方向的API。
这些API被放在了com.nokia.mid.ui.orientation 中, 通过他们你可以:
- 改变程序的方向。
- 侦测当前程序的方向。
- 当显示方向改变时,获取到一个系统通知。
但是需要注意,当一个MIdlet应用的横竖屏方向改变时,它必须重新redraw所使用到的低级UI组件,然而对于高级UI组件都是自动重画的,不需要我们担心。
Nokia Orientation API 支持下面四种显示方向:
- ORIENTATION_LANDSCAPE
- ORIENTATION_LANDSCAPE_180
- ORIENTATION_PORTRAIT
- ORIENTATION_PORTRAIT_180
需要注意的是,在Nokia3050 等2.0SDK 的手机中仅仅支持的是ORIENTATION_LANDSCAPE 和ORIENTATION_PORTRAIT 两种方向。
相关API
| Header text | Header text |
|---|---|
| OrientationListener | 横竖屏切换监听接口, displayOrientationChanged(int newDisplayOrientation) |
| Orientation | 用来获取,设置程序的UI方向,主要函数有:getAppOrientation() ,setAppOrientation() |
如何使用
- 1. 首先我们必须判断当前手机是否支持Orientation API,那么怎么来判断呢?
我们可以通过系统属性"com.nokia.mid.ui.orientation.version" 的返回值是否null来判断,一般来说,该API是在Nokia UI API 1.6以后才引入的,使用时请注意。
- 2.默认情况下,Orientation相关属性是关闭,要使用它我们必须在JAD文件中添加如下属性:
Nokia-MIDlet-App-Orientation: manual
manual: 当程序启动后,它的UI方向会跟随手机的方向 而对应变化。
- 3. 注册OrientationListener以便监听手机方向变化。
Orientation.addOrientationListener(orientationListener); 是用上面的方法进行注册。
- 4. 如何处理Orientation改变事件。
示例代码:
public void displayOrientationChanged( int newDisplayOrientation ){
/** Check display orientation */
switch( newDisplayOrientation ){
case Orientation.ORIENTATION_PORTRAIT:
case Orientation.ORIENTATION_PORTRAIT_180:
/** Change MIDlet UI orientation to portrait */
Orientation.setAppOrientation(Orientation.ORIENTATION_PORTRAIT);
break;
case Orientation.ORIENTATION_LANDSCAPE:
case Orientation.ORIENTATION_LANDSCAPE_180:
/** Change MIDlet UI orientation to landscape */
Orientation.setAppOrientation(Orientation.ORIENTATION_LANDSCAPE);
break;
}
}
可以从上面代码看出我们使用Orientation.setAppOrientation(Orientation.ORIENTATION_PORTRAIT) 来改变MIDlet的显示方向。
示例代码-1
The following code example shows how to use the Orientation API to handle the display orientation changes for a CustomItem.
下面的代码演示了如何使用Orientation API 在一个CustomItem中处理显示方向改变事件:
import com.nokia.mid.ui.orientation.Orientation;
import com.nokia.mid.ui.orientation.OrientationListener;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.CustomItem
public class CustomItemOrientationChanges extends CustomItem implements OrientationListener{
public CustomItemOrientationChanges(){
super(“CustomItemOrientationTest”);
Orientation.addOrientationListener( this );
}
/** Orientation listener callback */
public void displayOrientationChanged( int newDisplayOrientation ){
/** Check display orientation */
switch( newDisplayOrientation ){
case Orientation.ORIENTATION_PORTRAIT:
case Orientation.ORIENTATION_PORTRAIT_180:
/** Change MIDlet UI orientation to portrait */
Orientation.setAppOrientation(Orientation.ORIENTATION_PORTRAIT);
break;
case Orientation.ORIENTATION_LANDSCAPE:
case Orientation.ORIENTATION_LANDSCAPE_180:
/** Change MIDlet UI orientation to landscape */
Orientation.setAppOrientation(Orientation.ORIENTATION_LANDSCAPE);
break;
}
}
/** This is called by Java platform when the UI orientation has been changed */
protected void sizeChanged(int w, int h){
/** handle new dimensions */
}
/** Inherited from CustomItem */
protected int getMinContentHeight(){
/** CustomItem height depends on the app orientation */
if ( Orientation.getAppOrientation() == Orientation.ORIENTATION_PORTRAIT ){
/** return height for portrait layout */
}else{
/** return height for landscape layout */
}
}
/** Inherited from CustomItem */
protected int getMinContentWidth(){
/** CustomItem width depends on the app orientation */
if ( Orientation.getAppOrientation() == Orientation.ORIENTATION_LANDSCAPE ){
/** return width for landscape layout */
}else{
/** return width for portrait layout */
}
}
/** Inherited from CustomItem */
protected int getPrefContentHeight( int width ){
return getMinContentHeight();
}
/** Inherited from CustomItem */
protected int getPrefContentWidth( int height ){
return getMinContentWidth();
}
/** Inherited from CustomItem */
protected void paint( Graphics g, int width, int height ){
/** Render screen content */
}
}


