TabActivity的使用原理与切换卡tabwight的使用

原创 2013年12月04日 21:12:31


TabWidget类似Android中查看电话簿的界面,通过多个标签切换显示不同的内容。要实现这一效果,首先要了解TabHost ,它是一个用来存放多个Tab标签的容器。要使用TabHost ,首先需要通过getTabHost 方法来获取TabHost的对象,然后通过addTab方法来向TabHost中添加Tab,废话少说,进入正题:

/*
 * 首先这里新建了一个fesTaHostActivity,以后直接继承该类
 * 只需重写几个方法,protected void prepare()
 * protected int getTabCount(), abstract protected String  getTabItemId(int position);
    abstract protected Intent getTabItemIntent(int position);
     
 */

public abstract class fesTaHostActivity extends TabActivity{
       private TabHost mTabHost;
       private TabWidget mTabWidget;
       private LayoutInflater mLayoutInflater;
       
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setTheme(R.style.Theme_Tabhost);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.api_tab_host);
		mTabHost=getTabHost();//获取TabHost
		mLayoutInflater=getLayoutInflater();
		mTabWidget=getTabWidget();
		
		prepare();
		
		
		initTabSpec();
	}
    
    //初始化tabs
    private void initTabSpec()
    {
    	int count=getTabCount();
    	
    	for(int i=0;i<count;i++)
    	{
    		View tabItem=mLayoutInflater.inflate(R.layout.api_tab_item, null);
    		
    		TextView tvTabItem= (TextView)tabItem.findViewById(R.id.tab_item_tv);//这里是
    		System.out.println("33333"+tvTabItem);
    		setTabItemTextView(tvTabItem, i);
    		
    		String tabItemId=getTabItemId(i);
    		
    		/*
    		 * 添加tab项,
    		 */
    		TabSpec tabSpec=mTabHost.newTabSpec(tabItemId);
    		tabSpec.setIndicator(tabItem);
    		tabSpec.setContent(getTabItemIntent(i));
    		
    		
    		mTabHost.addTab(tabSpec);
    	}
    }

正如上面所说,这是个基类,下面是个继承类,只要重写一些方法,

public class ExampleActivity extends fesTaHostActivity{
    
	List<TabItem> mItems;
	private LayoutInflater mLayoutInflater;
	
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setCurrentTab(0);
        //默认加载第一个标签
        
    }
    
    @Override
    protected void prepare()
    {
    	TabItem home=new TabItem("推荐", R.drawable.icon_home,R.drawable.example_tab_item_bg,
                 new Intent(this,Tab1Activity.class)
    			);
    	TabItem festival=new TabItem("节日", R.drawable.icon_square, R.drawable.example_tab_item_bg,
    			new Intent(this,Tab1Activity.class)
    			);
    	TabItem collection=new TabItem("收藏", R.drawable.icon_meassage, R.drawable.example_tab_item_bg,
    			new Intent(this,Tab1Activity.class)
    			);
    	TabItem mine=new TabItem("我", R.drawable.icon_selfinfo, R.drawable.example_tab_item_bg,
    			new Intent(this,Tab1Activity.class)
    			);
    	
    	mItems=new ArrayList<TabItem>();
    	mItems.add(home);
    	mItems.add(festival);
    	mItems.add(collection);
    	mItems.add(mine);
    	
    	TabWidget tabWidget=getTabWidget();
    	tabWidget.setDividerDrawable(R.drawable.tab_divider);
    	
    	mLayoutInflater=getLayoutInflater();
    	
    }
	@Override
	protected void setTabItemTextView(TextView textview, int position) {
		// TODO Auto-generated method stub
		textview.setPadding(3, 3, 3, 3);
		textview.setText(mItems.get(position).getTitle());
		textview.setBackgroundResource(mItems.get(position).getBg());///设置背景
		textview.setCompoundDrawablesWithIntrinsicBounds(0, mItems.get(position).getIcon(), 0, 0);
		//设置Drawable显示在text的左、上、右、下位置
	}

	@Override
	protected String getTabItemId(int position) {
		// TODO Auto-generated method stub
		return mItems.get(position).getTitle();
	}

	@Override
	protected Intent getTabItemIntent(int position) {
		// TODO Auto-generated method stub
		return mItems.get(position).getIntent();
	}
    @Override
	protected int getTabCount()
    {
    	return mItems.size();
    }
    @Override
    protected View getTop()
    {
    	return mLayoutInflater.inflate(R.layout.example_tab_host_top, null);
    }
    
}

不难懂吧,只要重写方法prepare()等方法,就ok了

以下这个是对象tabitem的定义

public class TabItem {
       private String title;//标题
       private int icon;//图片
       private int bg;//背景
       private Intent intent;//跳转下一个界面
       
       public Intent getIntent() {
		return intent;
	}

	public void setIntent(Intent intent) {
		this.intent = intent;
	}

	public TabItem(String title,int icon ,int bg,Intent intent)
       {
    	   super();
    	   this.title=title;
    	   this.icon=icon;
    	   this.bg=bg;
    	   this.intent=intent;
       }

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	public int getIcon() {
		return icon;
	}

	public void setIcon(int icon) {
		this.icon = icon;
	}

	public int getBg() {
		return bg;
	}

	public void setBg(int bg) {
		this.bg = bg;
	}

	
       
}

下面是源码下载地址     点击打开链接

【android】TabActivity实现手指左右滑动切换tab

在做项目的时候主界面有好几个tab, 有些用户习惯性的左右滑屏来切换tab,所以添加了左右滑屏切换他变得功能。...
  • qq1377399077
  • qq1377399077
  • 2015年05月04日 14:27
  • 361

TabActivity自定义底部导航栏

TabActivity本身继承自ActivityGroup,主要功能是实现多个activity或者view之间的切换和显示,要使用该类必须新建一个类来继承TabActivity,并且该类的xml配置文...
  • yy471101598
  • yy471101598
  • 2016年11月25日 15:16
  • 167

使用TabActivity实现底部菜单栏

从这一篇文章开始,我们将进入到一个应用程序主界面UI的开发和设计中了,底部菜单栏在Android的应用开发当中占有非常重要的地位。几乎所有的手机应用程序都有底部菜单栏这样的控件,主要是因为手机的屏幕大...
  • fjseryi
  • fjseryi
  • 2015年11月17日 15:51
  • 953

已经弃用的TabActivity深深的伤害了我

在仿写别人的代码的时候发现用到的TabActivity被自动化掉了,仔细一看已经被弃用,deprecated了。 所以我就上网搜啊搜。看别人的博文。这位大神蛙齋所写如下 【 1. 把Ta...
  • bzumzs
  • bzumzs
  • 2016年06月15日 13:52
  • 3055

性能调优:ViewPager快速切换时卡顿的解决方案——Fragment内容延迟加载

当ViewPager切换到当前的Fragment时,Fragment会加载布局并显示内容,如果用户这时快速切换ViewPager,即Fragment需要加载UI内容,而又频繁地切换Fragment,就...
  • jackHanQi
  • jackHanQi
  • 2015年01月22日 16:55
  • 5587

Android之利用Handler消息机制实现Activity与TabActivity的互动

最近在项目中遇到这样一种情景,App采用旧式结构TabActivity,其内是4个Activity,底部有个RadioGroup实现选项卡功能,要实现的效果是:在其中一个Activity内点击某一控件...
  • HouChan2017
  • HouChan2017
  • 2017年01月22日 09:52
  • 400

使用Fragments取代tabActivity开发网易新闻客户端框架

前记:手头一直有一个网易新闻客户端的框架(只是一个空架子),基本在上面进行修改,就可以作出自己的东西。里面的主框架是使用TabActivity和TabHost。 近日打开项目发现,TabActi...
  • zjlovety
  • zjlovety
  • 2014年03月18日 16:47
  • 1282

TabHost的使用方法(不继承TabActivity)

有时候经常在一个界面中要包含TabHost(选项卡),可以用标签套入一个TabHost的界面 那么TabHost的界面就根据要求,填充一些交互界面,例如:...
  • u014330053
  • u014330053
  • 2014年04月10日 09:40
  • 638

Android如何在不继承TabActivity的情况下使用TAbHost

1.配置文件:()
  • u010352465
  • u010352465
  • 2014年07月15日 15:33
  • 945

Android 底部TabActivity(0)——开篇(界面分析|系列文章目录)

当下主流的软件没有一个统一明确的风格,App框架什么样的都有,但个人钟情于页面底部Tab分签架构,移动设备的屏幕虽然越来越大,但是显示的内容还是有限,为了能展示更多的内容,方便简洁的操作习惯中Tab架...
  • geofferysun
  • geofferysun
  • 2014年09月29日 01:42
  • 2035
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TabActivity的使用原理与切换卡tabwight的使用
举报原因:
原因补充:

(最多只允许输入30个字)