Tab Layout 之多个Activity实现

来源:互联网 发布:linux修改了profile 编辑:程序博客网 时间:2024/05/18 11:02

        上次说了可以用两种方法实现Tab Layout,之前写了单个Activity实现,现在来用多个Activity来实现,这篇文章是翻译的android develop网站上的文章!

         单个Activity实现就是在一个Activity里面切换显示内容,我们上次用的是三个TextView。这里我们用3个Activity实现,每次点击一个tab的时候,就打开一个新的Activity!我们创建一个tabbed UI,为每一个tab创建一个Activity!

      第一步:创建一个新的Android项目,命名为:HelloTabWidget。

      第二步:在项目中创建3个单独的Activity: ArtistsActivityAlbumsActivity, andSongsActivity. 在每一个Activity里面创建一个TextView来显示每个tab的内容!这里举一个例子,其他的两个类似:

public class ArtistsActivity extends Activity {    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        TextView textview = new TextView(this);        textview.setText("This is the Artists tab");        setContentView(textview);    }}

     把创建的3个Activity加入到 Android Manifest 文件中!

    第三步:我们为每个tab准备两个图片,一个是选中该tab时显示的图片,一个是没有选中该tab时显示的图片,如下所示:

    

    在项目中新建如下目录res/drawable/,在该目录下创建ic_tab_artists.xml文件,作用即是根据tab是否选中来设置显示的图标,文件内容如下:

<?xml version="1.0" encoding="utf-8"?><selector xmlns:android="http://schemas.android.com/apk/res/android">    <!-- When selected, use grey -->    <item android:drawable="@drawable/ic_tab_artists_grey"          android:state_selected="true" />    <!-- When not selected, use white-->    <item android:drawable="@drawable/ic_tab_artists_white" /></selector>

   第四步:打开res/layout/main.xml文件,修改内容如下:

<?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:orientation="vertical"        android:layout_width="fill_parent"        android:layout_height="fill_parent"        android:padding="5dp">        <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:padding="5dp" />    </LinearLayout></TabHost>

   第五步:打开HelloTabWidget.java文件,继承自TabActivity:

   

public class HelloTabWidget extends TabActivity
   第六步:在oncreate()方法中添加如下代码:

public void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.main);    Resources res = getResources(); // Resource object to get Drawables    TabHost tabHost = getTabHost();  // The activity TabHost    TabHost.TabSpec spec;  // Resusable TabSpec for each tab    Intent intent;  // Reusable Intent for each tab    // Create an Intent to launch an Activity for the tab (to be reused)    intent = new Intent().setClass(this, ArtistsActivity.class);    // Initialize a TabSpec for each tab and add it to the TabHost    spec = tabHost.newTabSpec("artists").setIndicator("Artists",                      res.getDrawable(R.drawable.ic_tab_artists))                  .setContent(intent);    tabHost.addTab(spec);    // Do the same for the other tabs    intent = new Intent().setClass(this, AlbumsActivity.class);    spec = tabHost.newTabSpec("albums").setIndicator("Albums",                      res.getDrawable(R.drawable.ic_tab_albums))                  .setContent(intent);    tabHost.addTab(spec);    intent = new Intent().setClass(this, SongsActivity.class);    spec = tabHost.newTabSpec("songs").setIndicator("Songs",                      res.getDrawable(R.drawable.ic_tab_songs))                  .setContent(intent);    tabHost.addTab(spec);    tabHost.setCurrentTab(2);}

   上面的代码和单个Activity实现的代码基本一样,这里就不再逐行解释。

   第七步:打开Android Manifest file文件,添加 NoTitleBar主题到 HelloTabWidget's <activity>标签中,如下所示:

    

<activity android:name=".HelloTabWidget" android:label="@string/app_name"          android:theme="@android:style/Theme.NoTitleBar">
   第八步:运行程序,截图如下: