Android TabHost的标签放在底部,已写成框架,继承即可_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Android TabHost的标签放在底部,已写成框架,继承即可

Android TabHost的标签放在底部,已写成框架,继承即可

 2012/3/17 15:26:37  kjsoloho  程序员俱乐部  我要评论(1)
  • 摘要:转载请注明:http://kjsoloho.iteye.com/blog/1456448网上已经有很多关于如何将TabHost的标签放在底部,这里就不说了主要是把这些都做成框架,只需要提供图片和文字就可以实现这样的效果。直接上图,代码解释的很清楚程序的图片借用新浪微博,如有不妥,请告知使用代码/***<p>整个流程就像使用ListView自定BaseAdapter一样</p>**<p>如果要自定义TabHostActivity的Theme
  • 标签:android 继承 BHO

转载请注明:http://kjsoloho.iteye.com/blog/1456448

网上已经有很多关于如何将TabHost的标签放在底部,这里就不说了

主要是把这些都做成框架,只需要提供图片和文字就可以实现这样的效果。

直接上图,代码解释的很清楚

程序的图片借用新浪微博,如有不妥,请告知

?

使用代码

?

/**
 * <p>整个流程就像使用ListView自定BaseAdapter一样</p>
 * 
 * <p>如果要自定义TabHostActivity的Theme,并且不想要头部阴影
 * 一定要添加这个android:windowContentOverlay = null</p>
 * 
 * <p>如果想在别的项目里面使用TabHostActivity
 * 可以项目的属性里面找到Android,然后在Library部分添加这个项目(Api)
 * <a href="http://www.cnblogs.com/qianxudetianxia/archive/2011/05/01/2030232.html">如何添加</a></p>
 * */
public class ExampleActivity extends TabHostActivity {

	List<TabItem> mItems;
	private LayoutInflater mLayoutInflater;
	
	/**在初始化TabWidget前调用
	 * 和TabWidget有关的必须在这里初始化*/
	@Override
	protected void prepare() {
		TabItem home = new TabItem(
				"首页",									// title
				R.drawable.icon_home,					// icon
				R.drawable.example_tab_item_bg,			// background
				new Intent(this, Tab1Activity.class));	// intent
		
		TabItem info = new TabItem(
				"资料",
				R.drawable.icon_selfinfo,
				R.drawable.example_tab_item_bg,
				new Intent(this, Tab2Activity.class));
		
		TabItem msg = new TabItem(
				"信息",
				R.drawable.icon_meassage,
				R.drawable.example_tab_item_bg,
				new Intent(this, Tab3Activity.class));
		
		TabItem square = new TabItem(
				"广场",
				R.drawable.icon_square,
				R.drawable.example_tab_item_bg,
				new Intent(this, Tab4Activity.class));
		
		TabItem more = new TabItem(
				"更多",
				R.drawable.icon_more,
				R.drawable.example_tab_item_bg,
				new Intent(this, Tab5Activity.class));
		
		mItems = new ArrayList<TabItem>();
		mItems.add(home);
		mItems.add(info);
		mItems.add(msg);
		mItems.add(square);
		mItems.add(more);

		// 设置分割线
		TabWidget tabWidget = getTabWidget();
		tabWidget.setDividerDrawable(R.drawable.tab_divider);
		
		mLayoutInflater = getLayoutInflater();
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setCurrentTab(0);
	}
	
	/**tab的title,icon,边距设定等等*/
	@Override
	protected void setTabItemTextView(TextView textView, int position) {
		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);
		
	}
	
	/**tab唯一的id*/
	@Override
	protected String getTabItemId(int position) {
		return mItems.get(position).getTitle();	// 我们使用title来作为id,你也可以自定
	}

	/**点击tab时触发的事件*/
	@Override
	protected Intent getTabItemIntent(int position) {
		return mItems.get(position).getIntent();
	}

	@Override
	protected int getTabItemCount() {
		return mItems.size();
	}
	
	/**自定义头部文件*/
	@Override
	protected View getTop() {
		return mLayoutInflater.inflate(R.layout.example_top, null);
	}

}

?

?

?框架代码

?

public abstract class TabHostActivity extends TabActivity {

	private TabHost mTabHost;
	private TabWidget mTabWidget;
	private LayoutInflater mLayoutflater;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// set theme because we do not want the shadow
		setTheme(R.style.Theme_Tabhost);
		setContentView(R.layout.api_tab_host);
		
		mLayoutflater = getLayoutInflater();

		mTabHost = getTabHost();
		mTabWidget = getTabWidget();
		//mTabWidget.setStripEnabled(false);	// need android2.2
		
		prepare();

		initTop();
		initTabSpec();
	}
	
	private void initTop() {
		View child = getTop();
		LinearLayout layout = (LinearLayout) findViewById(R.id.tab_top);
		layout.addView(child);
	}

	private void initTabSpec() {

		int count = getTabItemCount();

		for (int i = 0; i < count; i++) {
			// set text view
			View tabItem = mLayoutflater.inflate(R.layout.api_tab_item, null);
			
			TextView tvTabItem = (TextView) tabItem.findViewById(R.id.tab_item_tv);
			setTabItemTextView(tvTabItem, i);
			// set id
			String tabItemId = getTabItemId(i);
			// set tab spec
			TabSpec tabSpec = mTabHost.newTabSpec(tabItemId);
			tabSpec.setIndicator(tabItem);
			tabSpec.setContent(getTabItemIntent(i));
			
			mTabHost.addTab(tabSpec);
		}

	}

	/** 在初始化界面之前调用 */
	protected void prepare() {
		// do nothing or you override it
	}

	/** 自定义头部布局 */
	protected View getTop() {
		// do nothing or you override it
		return null;
	}
	
	protected int getTabCount() {
		return mTabHost.getTabWidget().getTabCount();
	}

	/** 设置TabItem的图标和标题等*/
	abstract protected void setTabItemTextView(TextView textView, int position);

	abstract protected String getTabItemId(int position);
	
	abstract protected Intent getTabItemIntent(int position);

	abstract protected int getTabItemCount();
	
	protected void setCurrentTab(int index) {
		mTabHost.setCurrentTab(index);
	}
	
	protected void focusCurrentTab(int index) {
		mTabWidget.focusCurrentTab(index);
	}

}
  • api.zip (177.4 KB)
  • 下载次数: 0
    网友 2012/4/17 15:11:20 发表

    草泥马

发表评论
用户名: 匿名