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. WIN7 WIN8 笔记本无线网卡MAC地址修改

    找了好久,尝试了好多种方法,最后终于在下面的网址里找到了解决方案 http://jingyan.baidu.com/article/ceb9fb10e32bce8cac2ba04a.html 使用MA ...

  2. LeetCode292:Nim Game

    You are playing the following Nim Game with your friend: There is a heap of stones on the table, eac ...

  3. NSString 截取字符串

    NSString字符串常用方法2010-09-06 14:18/******************************************************************** ...

  4. lib和dll的例子

    .dll和.lib的区别 lib是静态库,dll一般是动态链接库(也有可能是别的)比如要编译个exe,lib在编译的时候就会被编译到exe里,作为程序的一部分而dll是不被编译进去,是运行的时候才调入 ...

  5. angular select中ng-options使用

    function selectCtrl($scope) { $scope.selected = ''; $scope.model = [{ id: 10001, mainCategory: '男', ...

  6. java使用org.apache.poi读取与保存EXCEL文件

    一.读EXCEL文件 package com.ruijie.wis.cloud.utils; import java.io.FileInputStream; import java.io.FileNo ...

  7. C#中的Collection 1

    Collection定义 Collection是个关于一些变量的集合,按功能可分为Lists,Dictionaries,Sets三个大类. Lists:是一个有序的集合,支持index look up ...

  8. android ListView中button点击事件盖掉onItemClick解决办法

    ListView 1.在android应用当中,很多时候都要用到listView,但如果ListView当中添加Button后,ListView 自己的 public void onItemClick ...

  9. 无责任Windows Azure SDK .NET开发入门篇三[使用Azure AD 管理用户信息--3.4 Edit修改用户信息]

    3.4 Edit修改用户信息 我们用FormCollection简化了表单提交,非常方便的进行用户信息修改. [HttpPost, Authorize] public async Task<Ac ...

  10. 题外话(简识UML语言)

    PS:“不积小流无以成为江河,不积跬步无以至千里”,学习也好,吃饭也罢,做任何事情都需要一步一个脚印,逐步积累过程,最后才会知识越来越丰富,吃的越饱… 在学习过程中用到了一些框图,用于绘画框图的语言数 ...