The Idiosyncrasies

There are a few rules to follow, at least in this milestone edition of the Android toolkit, in order to make these three work together:

• You must give the TabWidget an android: id of @android: id/tabs

• You must set aside some padding in the FrameLayout for the tab buttons (more on this below)

• If you wish to use the TabActivity, you must give the TabHost an android:id [email protected]:id/tabhost

TabActivity, like ListActivity, wraps a common UI pattern (activity made up entirely of tabs) into a pattern-aware activity subclass. You do not necessarily have to use TabActivity - a plain activity can use tabs as well.

With respect to the FrameLayout padding issue, for whatever reason, the Tabwidget does not seem to allocate its own space inside the TabHost container. In other words, no matter what you specify for android:layout_height for the Tabwidget, the FrameLayout ignores it and draws at the top of the overall TabHost. Your tab contents obscure your tab buttons. Hence, you need to leave enough padding (via android:paddingTop) in FrameLayout to "shove" the actual tab contents down beneath the tab buttons. This is likely a bug, so this behavior may well change in future versions of the toolkit.

In addition, the Tabwidget seems to always draw itself with room for icons, even if you do not supply icons. Hence, for this version of the toolkit, you need to supply at least 62 pixels of padding, perhaps more depending on the icons you supply.

For example, here is a layout definition for a tabbed activity, from Tab:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabHost android:id="@+id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="wrap_content"

<FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="fill_parent"

android:paddingTop="62px">

<AnalogClock android:id="@+id/tab1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_centerHorizontal="true"

<Button android:id="@+id/tab2"

android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="A semi-random button"

</FrameLayout> </TabHost> </LinearLayout>

Note that the Tabwidget and FrameLayout are immediate children of the TabHost, and the FrameLayout itself has children representing the various tabs. In this case, there are two tabs: a clock and a button. In a more complicated scenario, the tabs are probably some form of container (e.g., LinearLayout) with their own contents.

Self Publishing

Self Publishing

Have you always wanted to write your own book and get it published? Discover How to Write, Print Sell Your Own Book! Have you always wanted to write your own book and get it published? If you have written a book or even if you have a yen to be a writer, you are probably already aware of the competition in the writing field.

Get My Free Ebook


Post a comment