symbian 界面设计常见问题及解决方法(12.15更新)
2008-12-01 10:04
519 查看
把自己在界面设计时碰到的问题及解决方法整理出来和大家分享,相信对大家有所帮助。 不断更新...
1.按下导航OK键能弹出菜单
看SDK根目录"/Series60Ex/menu/"这个例子,注意一下"aknexmenuokcontainer.cpp",它实现了一个很不错的功能:在按下导航键"OK"时能弹出菜单。可以看出主要是它的OfferKeyEventL()函数在起作用,所以试试把相关代码移到HandleCommandL()函数中应该就可以实现你要的功能。(from chenziteng)
TKeyResponse CAknExMenuOkContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
TEventCode aType )
{
TKeyResponse keyResponce( EKeyWasNotConsumed );
keyResponce = iLowerText->OfferKeyEventL( aKeyEvent, aType );
if ( keyResponce == EKeyWasNotConsumed )
{
if ( ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyOK ) )
{
// 从这儿
iParent->MenuBar()->
SetMenuTitleResourceId( R_AKNEXMENU_MENUBAR_OK_TEST );
if ( iParent->MenuBar() )
{
iParent->MenuBar()->StopDisplayingMenuBar();
}
if (iParent->MenuBar())
{
iParent->MenuBar()->TryDisplayMenuBarL();
}
}
iParent->MenuBar()->
SetMenuTitleResourceId( R_AKNEXMENU_MENUBAR_OK_MENU );
// 到这儿
return EKeyWasConsumed;
}
return keyResponce;
}
2. 动态改变左右softkeys
.rss文件
RESOURCE CBA r_yourapp_softkeys_options_stop
{
buttons =
{
CBA_BUTTON { id=EAknSoftkeyOptions; txt = "Options"; },
CBA_BUTTON { id=EYourAppCmdStopApp; txt = "Stop"; }
};
}
.hrh文件
enum TYourAppCommandIds
{
// ...
id=EYourAppCmdOpenApp,
id=EYourAppCmdStopApp,
// ...
};
appui.cpp
DynInitMenuPaneL()
{
Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);//换成r_yourapp_softkeys_options_stop
Cba()->MakeVisible(ETrue);
Cba()->DrawDeferred();
}
3. 在任意位置动态显示图片
void CAppContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
_LIT( KMbmFilePlay, "//System//apps//Password//PlayStatus.mbm");
iPlayBmp = new ( ELeave ) CFbsBitmap();
TFileName aFile1( KMbmFilePlay );
int err3=CompleteWithAppPath( aFile1 );
int err4=iPlayBmp->Load( aFile1,0);
iPlayRecStatus=0;
SetRect(aRect);
ActivateL();
}
void CAppContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.Clear( aRect );
if(iPlayRecStatus==1)//playing
{
TPoint aPos(10, 200);
gc.BitBlt( aPos, iPlayBmp );
}
}
void CAppContainer::StartDisplay(const TInt i)
{
iPlayRecStatus=i;
DrawDeferred();//调用Draw()
}
4.如何使Symbian程序一直全屏显示
一般而言有如下几种方法:
1,在Container的ConstructL中,调用SetExtentToWholeScreen ();
缺点是一按下“选项”,StatusPane和CBA又出来了。
2,在View的DoActivateL中,调用AppUi()->ApplicationRect()。
同样有如上的问题。
iMobile517MainContainer = CMobile517MainContainer::NewL(AppUi()->ApplicationRect(), NULL, this );
3,通过隐藏Status Pane和CBA,这种方法比较灵光(需要和2同时使用)!
在Container的ConstructL函数中调用:
CEikStatusPane* statusp = iEikonEnv->AppUiFactory()->StatusPane();
if(statusp) statusp->MakeVisible(EFalse);
iEikonEnv->AppUiFactory()->Cba()->MakeVisible(EFalse);
5. 怎样开发自适应各种屏幕尺寸的程序?
s60手机尺寸共三种:176*208,240*320,352*416。初期可只考虑240*320(覆盖了三版大多数机型),为保证图片在不同分辨率下都能正常显示,如果不是商业产品, 那么可以考虑 svg, 但是如果比较正式的话, 做3套UI, 代码里使用宏一类的技术手段去条件编译, 不同的机型会出不同的版本,SVG只能处理简单图形,类似游戏中用的复杂图形也无能为力.
可参考的可缩放界面实例有
S60 Platform: Scalable UI Example和
S60 Platform: Scalable Screen-Drawing Example实例都是不错的,可以参考
http://www.forum.nokia.com/main/reso.../graphics.html
1.按下导航OK键能弹出菜单
看SDK根目录"/Series60Ex/menu/"这个例子,注意一下"aknexmenuokcontainer.cpp",它实现了一个很不错的功能:在按下导航键"OK"时能弹出菜单。可以看出主要是它的OfferKeyEventL()函数在起作用,所以试试把相关代码移到HandleCommandL()函数中应该就可以实现你要的功能。(from chenziteng)
TKeyResponse CAknExMenuOkContainer::OfferKeyEventL( const TKeyEvent& aKeyEvent,
TEventCode aType )
{
TKeyResponse keyResponce( EKeyWasNotConsumed );
keyResponce = iLowerText->OfferKeyEventL( aKeyEvent, aType );
if ( keyResponce == EKeyWasNotConsumed )
{
if ( ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyOK ) )
{
// 从这儿
iParent->MenuBar()->
SetMenuTitleResourceId( R_AKNEXMENU_MENUBAR_OK_TEST );
if ( iParent->MenuBar() )
{
iParent->MenuBar()->StopDisplayingMenuBar();
}
if (iParent->MenuBar())
{
iParent->MenuBar()->TryDisplayMenuBarL();
}
}
iParent->MenuBar()->
SetMenuTitleResourceId( R_AKNEXMENU_MENUBAR_OK_MENU );
// 到这儿
return EKeyWasConsumed;
}
return keyResponce;
}
2. 动态改变左右softkeys
.rss文件
RESOURCE CBA r_yourapp_softkeys_options_stop
{
buttons =
{
CBA_BUTTON { id=EAknSoftkeyOptions; txt = "Options"; },
CBA_BUTTON { id=EYourAppCmdStopApp; txt = "Stop"; }
};
}
.hrh文件
enum TYourAppCommandIds
{
// ...
id=EYourAppCmdOpenApp,
id=EYourAppCmdStopApp,
// ...
};
appui.cpp
DynInitMenuPaneL()
{
Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);//换成r_yourapp_softkeys_options_stop
Cba()->MakeVisible(ETrue);
Cba()->DrawDeferred();
}
3. 在任意位置动态显示图片
void CAppContainer::ConstructL(const TRect& aRect)
{
CreateWindowL();
_LIT( KMbmFilePlay, "//System//apps//Password//PlayStatus.mbm");
iPlayBmp = new ( ELeave ) CFbsBitmap();
TFileName aFile1( KMbmFilePlay );
int err3=CompleteWithAppPath( aFile1 );
int err4=iPlayBmp->Load( aFile1,0);
iPlayRecStatus=0;
SetRect(aRect);
ActivateL();
}
void CAppContainer::Draw(const TRect& aRect) const
{
CWindowGc& gc = SystemGc();
gc.Clear( aRect );
if(iPlayRecStatus==1)//playing
{
TPoint aPos(10, 200);
gc.BitBlt( aPos, iPlayBmp );
}
}
void CAppContainer::StartDisplay(const TInt i)
{
iPlayRecStatus=i;
DrawDeferred();//调用Draw()
}
4.如何使Symbian程序一直全屏显示
一般而言有如下几种方法:
1,在Container的ConstructL中,调用SetExtentToWholeScreen ();
缺点是一按下“选项”,StatusPane和CBA又出来了。
2,在View的DoActivateL中,调用AppUi()->ApplicationRect()。
同样有如上的问题。
iMobile517MainContainer = CMobile517MainContainer::NewL(AppUi()->ApplicationRect(), NULL, this );
3,通过隐藏Status Pane和CBA,这种方法比较灵光(需要和2同时使用)!
在Container的ConstructL函数中调用:
CEikStatusPane* statusp = iEikonEnv->AppUiFactory()->StatusPane();
if(statusp) statusp->MakeVisible(EFalse);
iEikonEnv->AppUiFactory()->Cba()->MakeVisible(EFalse);
5. 怎样开发自适应各种屏幕尺寸的程序?
s60手机尺寸共三种:176*208,240*320,352*416。初期可只考虑240*320(覆盖了三版大多数机型),为保证图片在不同分辨率下都能正常显示,如果不是商业产品, 那么可以考虑 svg, 但是如果比较正式的话, 做3套UI, 代码里使用宏一类的技术手段去条件编译, 不同的机型会出不同的版本,SVG只能处理简单图形,类似游戏中用的复杂图形也无能为力.
可参考的可缩放界面实例有
S60 Platform: Scalable UI Example和
S60 Platform: Scalable Screen-Drawing Example实例都是不错的,可以参考
http://www.forum.nokia.com/main/reso.../graphics.html
相关文章推荐
- appframework学习--appframework开发常见问题及解决方法(不定期更新)
- Android studio在使用过程中常见的问题及解决方法(不定期更新),androidstudi
- Reporting Services 2005 常见问题解决方法(不断更新)
- Windows补丁和更新常见问题解决方法
- WSS&MOSS常见问题及解决方法[不断更新]
- ImageView.setImageURI()方法 图片界面不更新问题解决方案
- Android studio在使用过程中常见的问题及解决方法(不定期更新)
- Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题解决方法(持续更新)
- Gradle 导入开源工程 常见问题解决方法(持续更新中)
- Caffe搭建:常见问题解决办法和ubuntu使用中遇到问题解决方法(持续更新)
- vs2008打开aspx设计界面无响应问题解决方法
- JQuery Mobile常见问题解决方法和注意事项不断更新
- Windows常见问题解决方法 [2013-12-23更新]
- Linux 使用过程中常见问题及其解决方法(不定期更新)
- appframework学习--appframework开发常见问题及解决方法(不定期更新)
- Moss/SharePoint 常见问题以及解决方法(持续更新中)
- 常见问题解决方法【持续更新】
- 运维常见问题及解决方法汇总(持续更新...)
- 前端常见的浏览器兼容性问题及解决方法(不断更新中)
- ArcGIS Engine 10 开发常见问题的解决方法