至此,一个基于MVC的基本Android应用程序已经初步形成了。
下面我们来实现一个具有TabHost的布局的典型Android应用,由于我们基本上可以不考虑Android 4.x以前的版本,因此我对TabHost布局的实现将采用Fragment来实现,而不是采用旧的ActivityGroup来实现。
同时,我们希望我们的应用程序可以适用于不同的项目,因此需要TabHost上的图片及文字可以非常方便的进行更换。我们采用下部有5个选项的布局,其中中间的选项可以突出显示,选中某个选项,目前仅显示对应Fragmentation的名字。
好了,需求基本说清楚了,下面我们就开始一步步实现吧。
首先是基于Fragment的TabHost布局实现,原理很简单,在MainActivity的布局文件里添加如下代码即可:
<?xml version="1.0" encoding="utf-8"?> <TabHost xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/tabhost" android:layout_width="fill_parent" android:layout_height="fill_parent" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <!-- 实现Tab标签的居底主要是通过设置属性 android:layout_weight="1" --> <!-- 还要注意FrameLayout标签的位置,要写在TabWidget标签的前面 --> <FrameLayout android:id="@android:id/tabcontent" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_gravity="center_horizontal" android:layout_weight="1"> <fragment android:id="@+id/j_dynamicFragment" android:name="com.bjcic.wkj.gui.DynamicFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/j_findFragment" android:name="com.bjcic.wkj.gui.FindFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/j_shareFragment" android:name="com.bjcic.wkj.gui.ShareFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/j_snsFragment" android:name="com.bjcic.wkj.gui.SnsFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/j_moreFragment" android:name="com.bjcic.wkj.gui.MoreFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> <TabWidget android:id="@android:id/tabs" android:layout_width="fill_parent" android:layout_height="60dip" android:layout_gravity="center_horizontal" android:layout_marginLeft="-2dp" android:layout_marginRight="-2dp" android:background="@null" /> </LinearLayout> </TabHost> |