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.