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.