Tab与TabHost
盛放Tab的容器是TabHost
如何实现??
每一个Tab还对应了一个布局,这个就有点好玩了。一个Activity,对应了多个功能布局。
①新建一个Tab项目,注意,不要生成main Activity
②在包里面新建一个类MyTab,继承于TabActivity
其实,TabActivity是Activity的子类
- 1. package zyf.tab.test;
- 2.
- 3. import android.app.TabActivity;
- 4.
- 5. public class MyTab extends TabActivity {
- 6.
- 7. }
③从父类继承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=""
- 4. android:layout_width="fill_parent" android:layout_height="fill_parent">
- 5.
- 6. <!-- 第一个Tab 对应的布局 -- >
- 7. <LinearLayout android:id="@+id/widget_layout_Blue"
- 8. android:layout_width="fill_parent" android:layout_height="fill_parent"
- 9. androidrientation="vertical" >
- 10. <EditText android:id="@+id/widget34" android:layout_width="fill_parent"
- 11. android:layout_height="wrap_content" android:text="EditText"
- 12. android:textSize="18sp">
- 13. </EditText>
- 14. <Button android:id="@+id/widget30" android:layout_width="wrap_content"
- 15. android:layout_height="wrap_content" android:text="Button">
- 16. </Button>
- 17. </LinearLayout>
- 18. <!-- 第二个Tab 对应的布局 -- >
- 19. <LinearLayout android:id="@+id/widget_layout_red"
- 20. android:layout_width="fill_parent" android:layout_height="fill_parent"
- 21. androidrientation="vertical" >
- 22. <AnalogClock android:id="@+id/widget36"
- 23. android:layout_width="wrap_content" android:layout_height="wrap_content">
- 24. </AnalogClock>
- 25. </LinearLayout>
- 26. <!-- 第三个Tab 对应的布局 -- >
- 27. <LinearLayout android:id="@+id/widget_layout_green"
- 28. android:layout_width="fill_parent" android:layout_height="fill_parent"
- 29. androidrientation="vertical">
- 30. <RadioGroup android:id="@+id/widget43"
- 31. android:layout_width="166px" android:layout_height="98px"
- 32. androidrientation="vertical">
- 33. <RadioButton android:id="@+id/widget44"
- 34. android:layout_width="wrap_content" android:layout_height="wrap_content"
- 35. android:text="RadioButton">
- 36. </RadioButton>
- 37. <RadioButton android:id="@+id/widget45"
- 38. android:layout_width="wrap_content" android:layout_height="wrap_content"
- 39. android:text="RadioButton">
- 40. </RadioButton>
- 41. </RadioGroup>
- 42. </LinearLayout>
- 43. </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创建一个标签,然后设置一下标题/图标/标签页布局
- 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.
⑧标签切换事件处理,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. }
⑩运行效果
阅读(3222) | 评论(0) | 转发(0) |