android中TabActivity使用的详细说明

 TabActivity类位于android SDK中android.app.TabActivity下,它本身继承自ActivityGroup,主要功能是实现多个activity或者view之间的切换和显示,要使用该类必须新建一个类来继承TabActivity,并且该类的xml配置文件中必须包含<TabHost>、<TabWidget>、<FrameLayout>三个视图(View),其中后面两个标签是前面一个标签的子标签,<TabWidget>表示tab页的选项卡,相当于菜单页,<FrameLayout>表示显示内容的区域。下面写一个小例子来演示下TabActivity的使用吧。

        首先新建一个android项目,将src目录包名下的主Activity继承TabActivity,然后修改main.xml文件,可以根据自己程序的需要来对该文件布局进行调整,比如可以把<TabWidget>、<FrameLayout>放到一个<LinearLayout>中让他垂直分布,下面只是一个简单的大体框架,修改后如下:

  android中TabActivity使用的详细说明_第1张图片

然后再创建三个普通的Activity用来做跳转,分别创建FirstActivity、SecondActivity、ThirdActivity

public class FirstActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("This is the FirstActiviy!");
setContentView(textView);
}
}

然后在TabActivity中加入前面两个页面。

public class MainActivity extends TabActivity {
public static MainActivity mainActivity;
public static TabHost mTabHost;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Resources res = getResources();
        mainActivity = this;
        mTabHost = this.getTabHost();
        TabSpec tabSpec;
        Intent intent;
        intent = new Intent();
        intent.setClass(this, FirstActivity.class);
        tabSpec = mTabHost.newTabSpec("firstActivity").
        setIndicator("firstActivity", res.getDrawable(android.R.drawable.ic_media_previous)).setContent(intent);
        mTabHost.addTab(tabSpec);
        intent = new Intent();
        intent.setClass(this, SecondActivity.class);
        intent.putExtra("name", "value");
        tabSpec = mTabHost.newTabSpec("secondActivity").
        setIndicator("secondActivity", res.getDrawable(android.R.drawable.ic_media_play)).setContent(intent);
        mTabHost.addTab(tabSpec);
        mTabHost.setCurrentTabByTag("firstActivity");
    }
}

从上面可以看到tab也之间的跳转也是用Intent来做跳转的。并在在Intent中可以传递数据到相应activity页面,在activity页面中通过getIntent()方法将获得传递过来的Intent对象,然后可以对该对象进行操作。如在第二个activity中可以这样写:

public class SecondActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("This is the SecondActivity!");
setContentView(textView);
Intent intent = getIntent();
String str = intent.getStringExtra("name");
textView.setText(textView.getText()+"\n\n"+str);
}
}

也可以在其他普通的类中加入tab页,只要该类中能够获得到TabActivity中的TabHost即可,如在第一个activity中可以加上如下代码:

                Resources res = getResources();
TabSpec tabSpec;
Intent intent = new Intent();
intent.setClass(this, ThirdActivity.class);
tabSpec = MainActivity.mTabHost.newTabSpec("thirdActivity").
      setIndicator("thirdActivity", res.getDrawable(android.R.drawable.ic_media_next)).setContent(intent);
MainActivity.mTabHost.addTab(tabSpec);

这样将把第三个页面添加到tab页中。

也可以对activity中的控件和按键添加监听来跳转到指定的tab页,但要确保该tab页已经加入到TabHost当中,如在第三个页面中可以这样写。

public class ThirdActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this);
textView.setText("This is the ThirdActivity!");
setContentView(textView);
textView.setTextSize(25);
textView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
MainActivity.mTabHost.setCurrentTabByTag("firstActivity");
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
MainActivity.mTabHost.setCurrentTabByTag("secondActivity");
return true;
}
return super.onKeyDown(keyCode, event);
}
}

运行的效果图如下:

android中TabActivity使用的详细说明_第2张图片

本文只是对TabActivity的一个简单介绍,只做一个抛砖引玉的作用,请指教。

你可能感兴趣的:(android中TabActivity使用的详细说明)