{"id":497,"date":"2011-02-03T19:39:25","date_gmt":"2011-02-04T02:39:25","guid":{"rendered":"http:\/\/www.nayansavla.com\/blog\/?p=497"},"modified":"2011-02-03T19:43:54","modified_gmt":"2011-02-04T02:43:54","slug":"creating-bottom-navigation-bar-flex-mobile-part-2","status":"publish","type":"post","link":"https:\/\/www.nayansavla.com\/blog\/?p=497","title":{"rendered":"Creating Bottom Navigation Bar Flex Mobile Part 2"},"content":{"rendered":"<p>In my earlier <a href=\"http:\/\/www.nayansavla.com\/blog\/?p=453\" target=\"_blank\">post<\/a> i wrote about a way how you can create a bottom navigation bar in your Flex mobile applications. But recently i came across TabbedMobileApplication which has a Tabbar component built in but the tabbar is on top.<br \/>\n<br \/>\nIt was fairly easy for me to modify the skin for this application&#8217;s TabbedViewNavigator component so that it would have the tabbar in bottom and the viewnavigator on top.<br \/>\n<br \/>\nThis is how the application looks,<br \/>\n<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" title=\"Bottom Tab\" src=\"http:\/\/nayansavla.com\/uploads\/flash\/bottomtwo\/tabbapp.png\" alt=\"\" width=\"479\" height=\"786\" \/><br \/>\n<br \/>\nI just copied the skin file from TabbedViewNavigatorSkin and modified it little to achieve the result.<br \/>\n<br \/>\nThis is how my custom skin class looks as below, you can download the project file <a href=\"http:\/\/nayansavla.com\/uploads\/flash\/bottomtwo\/TabbedMobile.fxp\" target=\"_blank\">here<\/a>.<br \/>\n<\/p>\n<div class=\"codecolorer-container actionscript default\" style=\"overflow:auto;white-space:nowrap;width:435px;height:300px;\"><div class=\"actionscript codecolorer\">package skins <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">import<\/span> spark.<span class=\"me1\">components<\/span>.<span class=\"me1\">ButtonBar<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">import<\/span> spark.<span class=\"me1\">components<\/span>.<span class=\"me1\">Group<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">import<\/span> spark.<span class=\"me1\">skins<\/span>.<span class=\"me1\">mobile<\/span>.<span class=\"me1\">TabbedViewNavigatorSkin<\/span>;<br \/>\n&nbsp; &nbsp; <span class=\"kw3\">import<\/span> spark.<span class=\"me1\">skins<\/span>.<span class=\"me1\">spark<\/span>.<span class=\"me1\">ButtonBarSkin<\/span>;<br \/>\n&nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"kw3\">public<\/span> <span class=\"kw2\">class<\/span> MySkin <span class=\"kw3\">extends<\/span> TabbedViewNavigatorSkin <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">public<\/span> <span class=\"kw2\">function<\/span> MySkin<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">super<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; protected override <span class=\"kw2\">function<\/span> createChildren<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup = <span class=\"kw2\">new<\/span> Group<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup.<span class=\"me1\">id<\/span> = <span class=\"st0\">&quot;contentGroup&quot;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar = <span class=\"kw2\">new<\/span> ButtonBar<span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">id<\/span> = <span class=\"st0\">&quot;tabBar&quot;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">requireSelection<\/span> = <span class=\"kw2\">true<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"kw3\">setStyle<\/span><span class=\"br0\">&#40;<\/span><span class=\"st0\">&quot;skinClass&quot;<\/span>, ButtonBarSkin<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"kw3\">height<\/span> = <span class=\"nu0\">40<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class=\"br0\">&#40;<\/span>tabBar<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; addChild<span class=\"br0\">&#40;<\/span>contentGroup<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; override protected <span class=\"kw2\">function<\/span> updateDisplayList<span class=\"br0\">&#40;<\/span>unscaledWidth:<span class=\"kw3\">Number<\/span>, unscaledHeight:<span class=\"kw3\">Number<\/span><span class=\"br0\">&#41;<\/span>:<span class=\"kw3\">void<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw3\">super<\/span>.<span class=\"me1\">updateDisplayList<\/span><span class=\"br0\">&#40;<\/span>unscaledWidth, unscaledHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> tabBarHeight:<span class=\"kw3\">Number<\/span> = <span class=\"nu0\">0<\/span>; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>tabBar.<span class=\"me1\">includeInLayout<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBarHeight = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">min<\/span><span class=\"br0\">&#40;<\/span>tabBar.<span class=\"me1\">getPreferredBoundsHeight<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>, unscaledHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">setLayoutBoundsSize<\/span><span class=\"br0\">&#40;<\/span>unscaledWidth, tabBarHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBarHeight = tabBar.<span class=\"me1\">getLayoutBoundsHeight<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span>; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>currentState == <span class=\"st0\">&quot;portraitAndOverlay&quot;<\/span> <span class=\"sy0\">||<\/span> currentState == <span class=\"st0\">&quot;landscapeAndOverlay&quot;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">alpha<\/span> = .6;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>contentGroup.<span class=\"me1\">includeInLayout<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup.<span class=\"me1\">setLayoutBoundsSize<\/span><span class=\"br0\">&#40;<\/span>unscaledWidth, unscaledHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup.<span class=\"me1\">setLayoutBoundsPosition<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">else<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">alpha<\/span> = <span class=\"nu0\">1.0<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>contentGroup.<span class=\"me1\">includeInLayout<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw2\">var<\/span> contentGroupHeight:<span class=\"kw3\">Number<\/span> = <span class=\"kw3\">Math<\/span>.<span class=\"kw3\">max<\/span><span class=\"br0\">&#40;<\/span>unscaledHeight - tabBarHeight, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup.<span class=\"me1\">setLayoutBoundsSize<\/span><span class=\"br0\">&#40;<\/span>unscaledWidth, contentGroupHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; contentGroup.<span class=\"me1\">setLayoutBoundsPosition<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, <span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"br0\">&#40;<\/span>tabBar.<span class=\"me1\">includeInLayout<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#123;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tabBar.<span class=\"me1\">setLayoutBoundsPosition<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span>, contentGroupHeight<span class=\"br0\">&#41;<\/span>;<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <br \/>\n&nbsp; &nbsp; <span class=\"br0\">&#125;<\/span><br \/>\n<span class=\"br0\">&#125;<\/span><\/div><\/div>\n<p>\n<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my earlier post i wrote about a way how you can create a bottom navigation bar in your Flex mobile applications. But recently i came across TabbedMobileApplication which has a Tabbar component built in but the tabbar is on top. It was fairly easy for me to modify the skin for this application&#8217;s TabbedViewNavigator [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,64],"tags":[],"class_list":["post-497","post","type-post","status-publish","format-standard","hentry","category-flex","category-mobile"],"_links":{"self":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=497"}],"version-history":[{"count":0,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/497\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.nayansavla.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}