Книга: Beginning Android
The Idiosyncrasies
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 mus t give the TabWidget
an android:id
of @android:id/tabs
.
• You must set aside some padding in the FrameLayout
for the tab buttons.
• If you wish to use the TabActivity
, you must give the TabHost
an android:id
of @android: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.
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 Fancy/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.
- 4.4.4 The Dispatcher
- About the author
- Chapter 7. The state machine
- Appendix E. Other resources and links
- Example NAT machine in theory
- The final stage of our NAT machine
- Compiling the user-land applications
- The conntrack entries
- Untracked connections and the raw table
- Basics of the iptables command
- Other debugging tools
- Setting up user specified chains in the filter table