最近在做一个平板电脑点餐的系统,要用到TabHost,不太好写,写好了分享给大家,先上图片,默认效果:
切换后效果
先是layout文件夹中的布局文件,代码如下:
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:background="@drawable/category_bg"
android:padding="0dp" >
<TabWidget
android:id="@android:id/tabs"
android:layout_width="wrap_content"
android:layout_height="40dp"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/context_bg"
android:padding="0dp" />
</LinearLayout>
</TabHost>
然后是java文件,
package com.dzdc.activity; import android.app.TabActivity; import android.content.Intent; import android.graphics.Typeface; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.TabHost; import android.widget.TabHost.OnTabChangeListener; import android.widget.TextView; import com.dzdc.R; @SuppressWarnings("deprecation") public class IndexActivity extends TabActivity { private String[] tabMenu = { "热菜", "冷菜", "海鲜", "川菜", "酒饮", "招牌菜" }; private Intent intent0, intent1, intent2, intent3, intent4, intent5; private Intent[] intents = { intent0, intent1, intent2, intent3, intent4, intent5 }; private TabHost.TabSpec tabSpec0, tabSpec1, tabSpec2, tabSpec3, tabSpec4, tabSpec5; private TabHost.TabSpec[] tabSpecs = { tabSpec0, tabSpec1, tabSpec2, tabSpec3, tabSpec4, tabSpec5 }; private TabHost tabHost = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏 getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.index); tabHost = getTabHost(); for (int i = 0; i < tabMenu.length; i++) { intents[i] = new Intent(); intents[i].setClass(this, IndexContentActivity.class); tabSpecs[i] = tabHost.newTabSpec(tabMenu[i]); tabSpecs[i].setIndicator(tabMenu[i]);// 设置文字 tabSpecs[i].setContent(intents[i]);// 设置该页的内容 tabHost.addTab(tabSpecs[i]);// 将该页的内容添加到Tabhost } tabHost.setCurrentTabByTag(tabMenu[0]); // 设置第一次打开时默认显示的标签, updateTab(tabHost);//初始化Tab的颜色,和字体的颜色 tabHost.setOnTabChangedListener(new OnTabChangedListener()); // 选择监听器 } class OnTabChangedListener implements OnTabChangeListener { @Override public void onTabChanged(String tabId) { tabHost.setCurrentTabByTag(tabId); System.out.println("tabid " + tabId); System.out.println("curreny after: " + tabHost.getCurrentTabTag()); updateTab(tabHost); } } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { System.exit(0); return false; } else if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) { return true; // 返回true就不会弹出默认的setting菜单 } return false; } /** * 更新Tab标签的颜色,和字体的颜色 * @param tabHost */ private void updateTab(final TabHost tabHost) { for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { View view = tabHost.getTabWidget().getChildAt(i); TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); tv.setTextSize(16); tv.setTypeface(Typeface.SERIF, 2); // 设置字体和风格 if (tabHost.getCurrentTab() == i) {//选中 view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_current));//选中后的背景 tv.setTextColor(this.getResources().getColorStateList( android.R.color.black)); } else {//不选中 view.setBackgroundDrawable(getResources().getDrawable(R.drawable.category_bg));//非选择的背景 tv.setTextColor(this.getResources().getColorStateList( android.R.color.white)); } } } }