Tab与TabHost

这就是Tab,而盛放Tab的容器就是TabHost
如何实现??
每一个Tab还对应了一个布局,这个就有点好玩了。一个Activity,对应了多个功能布局。
①新建一个Tab项目,注意,不要生成main Activity

这里不要选
②在包里面新建一个类MyTab,继承于TabActivity
其实,TabActivity是Activity的子类

  1. package zyf.tab.test;
  2. import android.app.TabActivity;
  3. public class MyTab extends TabActivity {
  4. }

复制代码

③从父类继承OnCreate()入口方法

  1. package zyf.tab.test;
  2. import android.app.TabActivity;
  3. import android.os.Bundle;
  4. public class MyTab extends TabActivity {
  5. @Override
  6. protected void onCreate(Bundle savedInstanceState) {
  7. // TODO Auto-generated method stub
  8. super.onCreate(savedInstanceState);
  9. }
  10. }

复制代码

④在Manifest.xml文件中注册一下MyTab类(Activity)

  1. <activity android:name=".MyTab">
  2. <intent-filter>
  3. <action android:name="android.intent.action.MAIN"></action>
  4. <category android:name="android.intent.category.LAUNCHER"></category>
  5. </intent-filter>
  6. </activity>

复制代码

⑤这时候,需要设计一下标签页对应的布局,一般采用FrameLayout作为根布局,每个标签页面对应一个子节点的Layout

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!--  这里是根节点布局  -- >
  3. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:layout_width="fill_parent" android:layout_height="fill_parent">
  5. <!--  第一个Tab 对应的布局  -- >
  6. <LinearLayout android:id="@+id/widget_layout_Blue"
  7. android:layout_width="fill_parent" android:layout_height="fill_parent"
  8. androidrientation="vertical" >
  9. <EditText android:id="@+id/widget34" android:layout_width="fill_parent"
  10. android:layout_height="wrap_content" android:text="EditText"
  11. android:textSize="18sp">
  12. </EditText>
  13. <Button android:id="@+id/widget30" android:layout_width="wrap_content"
  14. android:layout_height="wrap_content" android:text="Button">
  15. </Button>
  16. </LinearLayout>
  17. <!--  第二个Tab 对应的布局  -- >
  18. <LinearLayout android:id="@+id/widget_layout_red"
  19. android:layout_width="fill_parent" android:layout_height="fill_parent"
  20. androidrientation="vertical"  >
  21. <AnalogClock android:id="@+id/widget36"
  22. android:layout_width="wrap_content" android:layout_height="wrap_content">
  23. </AnalogClock>
  24. </LinearLayout>
  25. <!--  第三个Tab 对应的布局  -- >
  26. <LinearLayout android:id="@+id/widget_layout_green"
  27. android:layout_width="fill_parent" android:layout_height="fill_parent"
  28. androidrientation="vertical">
  29. <RadioGroup android:id="@+id/widget43"
  30. android:layout_width="166px" android:layout_height="98px"
  31. androidrientation="vertical">
  32. <RadioButton android:id="@+id/widget44"
  33. android:layout_width="wrap_content" android:layout_height="wrap_content"
  34. android:text="RadioButton">
  35. </RadioButton>
  36. <RadioButton android:id="@+id/widget45"
  37. android:layout_width="wrap_content" android:layout_height="wrap_content"
  38. android:text="RadioButton">
  39. </RadioButton>
  40. </RadioGroup>
  41. </LinearLayout>
  42. </FrameLayout>

复制代码

⑥首先,应该声明TabHost,然后用LayoutInflater过滤出布局来,给TabHost加上含有Tab页面的FrameLayout

  1. private TabHost myTabhost;
  2. myTabhost=this.getTabHost();//从TabActivity上面获取放置Tab的TabHost
  3. LayoutInflater.from(this).inflate(R.layout.main, myTabhost.getTabContentView(), true);
  4. //from(this)从这个TabActivity获取LayoutInflater
  5. //R.layout.main 存放Tab布局
  6. //通过TabHost获得存放Tab标签页内容的FrameLayout
  7. //是否将inflate 拴系到根布局元素上
  8. myTabhost.setBackgroundColor(Color.argb(150, 22, 70, 150));
  9. //设置一下TabHost的颜色

复制代码

⑦接着,在TabHost创建一个标签,然后设置一下标题/图标/标签页布局

  1. myTabhost
  2. .addTab(myTabhost.newTabSpec("TT")// 制造一个新的标签TT
  3. .setIndicator("KK",
  4. getResources().getDrawable(R.drawable.ajjc))
  5. // 设置一下显示的标题为KK,设置一下标签图标为ajjc
  6. .setContent(R.id.widget_layout_red));
  7. //设置一下该标签页的布局内容为R.id.widget_layout_red,这是FrameLayout中的一个子Layout

复制代码

⑧标签切换事件处理,setOnTabChangedListener

  1. myTabhost.setOnTabChangedListener(new OnTabChangeListener(){
  2. @Override
  3. public void onTabChanged(String tabId) {
  4. // TODO Auto-generated method stub
  5. }
  6. });

复制代码

⑨各个标签页的动态MENU
先把在XML中设计好的MENU放到一个int数组里

  1. private static final int myMenuResources[] = { R.menu.phonebook_menu,
  2. R.menu.addphone_menu, R.menu.chatting_menu, R.menu.userapp_menu };

复制代码

在setOnTabChangedListener()方法中根据标签的切换情况来设置myMenuSettingTag

  1. @Override
  2. public void onTabChanged(String tagString) {
  3. // TODO Auto-generated method stub
  4. if (tagString.equals("One")) {
  5. myMenuSettingTag = 1;
  6. }
  7. if (tagString.equals("Two")) {
  8. myMenuSettingTag = 2;
  9. }
  10. if (tagString.equals("Three")) {
  11. myMenuSettingTag = 3;
  12. }
  13. if (tagString.equals("Four")) {
  14. myMenuSettingTag = 4;
  15. }
  16. if (myMenu != null) {
  17. onCreateOptionsMenu(myMenu);
  18. }
  19. }

复制代码

然后onCreateOptionsMenu(Menu menu) 方法中通过MenuInflater过滤器动态加入MENU

  1. @Override
  2. public boolean onCreateOptionsMenu(Menu menu) {
  3. // TODO Auto-generated method stub
  4. // Hold on to this
  5. myMenu = menu;
  6. myMenu.clear();//清空MENU菜单
  7. // Inflate the currently selected menu XML resource.
  8. MenuInflater inflater = getMenuInflater();
  9. //从TabActivity这里获取一个MENU过滤器
  10. switch (myMenuSettingTag) {
  11. case 1:
  12. inflater.inflate(myMenuResources[0], menu);
  13. //动态加入数组中对应的XML MENU菜单
  14. break;
  15. case 2:
  16. inflater.inflate(myMenuResources[1], menu);
  17. break;
  18. case 3:
  19. inflater.inflate(myMenuResources[2], menu);
  20. break;
  21. case 4:
  22. inflater.inflate(myMenuResources[3], menu);
  23. break;
  24. default:
  25. break;
  26. }
  27. return super.onCreateOptionsMenu(menu);
  28. }

复制代码

⑩运行效果

【Android 界面效果22】Android的Tab与TabHost的更多相关文章

  1. 【Android 界面效果21】Android ViewPager使用详解

    这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api.而viewpager就是其中之一利用它,我们可以做很多事情,从最简单的导航,到页面菜单等等.那如 ...

  2. 【Android 界面效果31】Android--侧滑菜单应用的实现

    侧滑菜单应用现在非常多,而且实现方式也多种多样.通过在网上的多方查找,我找到郭霖少侠的这篇文章:http://blog.csdn.net/guolin_blog/article/details/874 ...

  3. 【Android 界面效果25】android中include标签的使用

    在一个项目中我们可能会需要用到相同的布局设计,如果都写在一个xml文件中,代码显得很冗余,并且可读性也很差,所以我们可以把相同布局的代码单独写成一个模块,然后用到的时候可以通过<include ...

  4. 【Android 界面效果18】Android软件开发之常用系统控件界面整理

    [java] view plaincopyprint?   <span style="font-size:18px">1.文本框TextView TextView的作用 ...

  5. 【Android 界面效果17】Android手机平板两不误,使用Fragment实现兼容手机和平板的程序

    记得我之前参与开发过一个华为的项目,要求程序可以支持好几种终端设备,其中就包括Android手机和Android Pad.然后为了节省人力,公司无节操地让Android手机和Android Pad都由 ...

  6. 【Android 界面效果13】关于全屏和取消标题栏

    ------- 源自梦想.永远是你IT事业的好友.只是勇敢地说出我学到! ---------- 去掉标题栏: 第一种:也一般入门的时候经常使用的一种方法 requestWindowFeature(Wi ...

  7. 【Android 界面效果39】android:inputType问题

    1.  在XML代码中实现比较简单, 直接设置android:inputType="textMultiLine": [mw_shl_code=java,true]<EditT ...

  8. 【Android 界面效果33】二级listview列表

    今天来实现以下大众点评客户端的横向listview二级列表,先看一下样式. 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的.可能是因为平板屏 ...

  9. 【Android 界面效果27】利用ViewPager、Fragment、PagerTabStrip实现多页面滑动效果

    本文主要介绍如何利用ViewPager.Fragment.PagerTabStrip实现多页面滑动效果.即google play首页.新浪微博消息(at.评论.私信.广播)页面的效果.ViewPage ...

随机推荐

  1. ASP.NET的分页方法(一)

    要做一个关于分页写法的专题,这是今天的第一讲,自制分页,可能有些代码需要优化,希望大家给出一些中肯的建议 前台使用的repeater绑定的数据: <form id="form1&quo ...

  2. does not support ASP.NET compatibility 错误

    The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibi ...

  3. VS2008注册码

    PYHYP-WXB3B-B2CCM-V9DX9-VDY8T 如果下载的是90天的试用版,下载下来以后把ISO里面的Setup\setup.sdb文件用记事本打开,把其中的[Product Key]下面 ...

  4. J2EE项目相对路径、绝对路径获取

    String path = getServletContext().getRealPath("/"); 这将获取web项目的全路径. this.getClass().getClas ...

  5. 初步认识shell

    言语不多说,直奔主题,lz不善于写文章,只是记录自己学习过程中的点点滴滴. 注意:shell对于字母大小写比较敏感. 打开终端出现:username@hostname$或者root@hostname# ...

  6. ps:探索按钮按起落下的技巧

    (从死了一次又一次终于挂掉的百度空间中抢救出来的,发表日期 2014-07-10) 先上图: 那个看上去想按下去的,那个看上去像自然地呢? 显而易见: 第一像按下去的,第二个像自然地. 原因: 渐变: ...

  7. Builder

    Builder模式的使用情景 相同的方法, 不同的执行顺序, 产生不同的事件结果 多个部件或零件, 都可以装配到一个对象中, 但是产生的运行结果又不相同 产品类比较复杂, 或者产品类中的调用顺序不同产 ...

  8. Codeforces Round #336 (Div. 2)B. Hamming Distance Sum 前缀和

    B. Hamming Distance Sum 题目连接: http://www.codeforces.com/contest/608/problem/A Description Genos need ...

  9. 用ASP实现简单的繁简转换

    用ASP实现简单的繁简转换 国际化似乎是一个很流行的口号了,一个站点没有英文版至少也要弄个繁体版,毕竟都是汉字,翻译起来不会那么麻烦:P 一般的繁简转换是使用字典,通过GB的内码算出BIG5字符在字典 ...

  10. [Angular2 Form] Display Validation and Error Messaging in Angular 2

    Angular 2’s ngModel provides error objects for each of the built-in input validators. You can access ...