symbian 界面设计常见问题及解决方法(12.15更新)

把自己在界面设计时碰到的问题及解决方法整理出来和大家分享,相信对大家有所帮助。 不断更新...

 

1.按下导航OK键能弹出菜单

     看SDK根目录"/Series60Ex/menu/"这个例子,注意一下"aknexmenuokcontainer.cpp",它实现了一个很不错的功能:在按下导航键"OK"时能弹出菜单。可以看出主要是它的OfferKeyEventL()函数在起作用,所以试试把相关代码移到HandleCommandL()函数中应该就可以实现你要的功能。(from chenziteng)  

  1. TKeyResponse   CAknExMenuOkContainer::OfferKeyEventL(   const   TKeyEvent&   aKeyEvent,     
  2.                                                                                                           TEventCode   aType   )   
  3.           {   
  4.           TKeyResponse   keyResponce(   EKeyWasNotConsumed   );   
  5.     
  6.           keyResponce   =   iLowerText->OfferKeyEventL(   aKeyEvent,   aType   );   
  7.     
  8.           if   (   keyResponce   ==   EKeyWasNotConsumed   )   
  9.                   {   
  10.                   if   (   (   aType   ==   EEventKey   )   &&   (   aKeyEvent.iCode   ==   EKeyOK   )   )   
  11.                           {   
  12.   //   从这儿   
  13.                           iParent->MenuBar()->   
  14.                                   SetMenuTitleResourceId(   R_AKNEXMENU_MENUBAR_OK_TEST   );   
  15.     
  16.                           if   (   iParent->MenuBar()   )   
  17.                                   {   
  18.                                   iParent->MenuBar()->StopDisplayingMenuBar();   
  19.                                   }   
  20.                           if   (iParent->MenuBar())   
  21.                                   {   
  22.                                   iParent->MenuBar()->TryDisplayMenuBarL();   
  23.                                   }   
  24.                           }   
  25.                   iParent->MenuBar()->   
  26.                           SetMenuTitleResourceId(   R_AKNEXMENU_MENUBAR_OK_MENU   );   
  27.   //   到这儿   
  28.                   return   EKeyWasConsumed;   
  29.                   }   
  30.     
  31.           return   keyResponce;   
  32.     
  33.           }

2. 动态改变左右softkeys

  1. .rss文件
  2.    RESOURCE CBA r_yourapp_softkeys_options_stop
  3.     {
  4.     buttons = 
  5.         {
  6.         CBA_BUTTON { id=EAknSoftkeyOptions; txt = "Options"; },
  7.         CBA_BUTTON { id=EYourAppCmdStopApp; txt = "Stop"; }
  8.         };
  9.     }
  10. .hrh文件
  11. enum TYourAppCommandIds
  12.      {
  13.     // ...
  14.     id=EYourAppCmdOpenApp,
  15.     id=EYourAppCmdStopApp,
  16.     // ...
  17.     };
  18. appui.cpp
  19. DynInitMenuPaneL()
  20. {
  21.    Cba()->SetCommandSetL(R_AVKON_SOFTKEYS_OPTIONS_BACK);//换成r_yourapp_softkeys_options_stop
  22.    Cba()->MakeVisible(ETrue);
  23.    Cba()->DrawDeferred();
  24. }
  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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值