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



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;
	}

	
       
}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值