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>中让他垂直分布,下面只是一个简单的大体框架,修改后如下:

  

然后再创建三个普通的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);
}
}

运行的效果图如下:


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值