您的位置:首页 > 产品设计 > UI/UE

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

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息