Layout change events are generated when the screen size or layout is changed. The Symbian platform supports multiple screen resolutions (scalable UI). Thus, layout awareness is particularly crucial for those applications that implement a customized UI instead of using automatically scalable AVKON UI components. Applications can detect the changes in layout with, for example, the following methods:
Controls can override the CCoeControl::HandleResourceChange() to detect the KEikDynamicLayoutVariantSwitch message.
UI controllers can override the CCoeControl::HandleResourceChange() to detect the KEikDynamicLayoutVariantSwitch message.
The following example code demonstrates the implementation of HandleResourceChange():
void CExampleControl::HandleResourceChange( TInt aType ) { CCoeControl::HandleResourceChange(aType); //call base class implementation if( aType==KEikDynamicLayoutVariantSwitch ) { TRect rect; // ask where container's rectangle should be // EMainPane equals to area returned by //CEikAppUi::ClientRect() AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,rect ); SetRect( rect ); } }
The following example code demonstrates the implementation of HandleResourceChangeL():
void CExampleAppUi::HandleResourceChangeL( TInt aType ) { CAknAppUi::HandleResourceChangeL( aType ); if( aType == KEikDynamicLayoutVariantSwitch ) { // do the re-layout of the components } // Controls derived from CCoeControl, handled in a // container class iExampleControlContainer->HandleResourceChange( aType ); //Must not call this if the components are on the control stack //iView->HandleResourceChangeL( aType ); }
If iExampleControlContainer is added to the control stack, it will get its HandleResourceChange() called when a layout is switched and there is no need to call it explicitly.
Copyright ©2010 Nokia Corporation and/or its subsidiary(-ies).
All rights
reserved. Unless otherwise stated, these materials are provided under the terms of the Eclipse Public License
v1.0.