TabHost的两种实现方式
2016-06-21 23:32
232 查看
TabHost在App中用的还是比较多的,因为最近使用TabHost的时候出现了些小插曲,特写此博文;一来是为了下次使用到时候能够印象深刻,二来是为了帮助和我一样出现过类似错误的朋友。
下面直接进入正题第一种:使用系统给定的id,并且继承自TabActivity,这个也是最简单的。
下面贴上布局代码<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xuyongjun.application.MainActivity"> <!--第一种:使用系统给定的Id--> <TabHost android:layout_width="match_parent" android:layout_height="match_parent" android:id="@android:id/tabhost"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:id="@android:id/tabcontent"></FrameLayout> <TabWidget android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@android:id/tabs"> </TabWidget> </LinearLayout> </TabHost> </RelativeLayout>
下面贴上Java代码。注意,本人使用的是Activity作为Content
public class SystemTabActivity extends TabActivity { private String[] mTag = {"tag1","tag2","tag3","tag4"}; private Intent[] mIntent; private String[] mIndicator = {"驾考","学车","买车","百宝箱"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* 初始化Intent */ initIntent(); /* 设置TabHost */ initTabHost(); } private void initIntent() { Intent intent1 = new Intent(this,A_Activity.class); Intent intent2 = new Intent(this,B_Activity.class); Intent intent3 = new Intent(this,C_Acitivity.class); Intent intent4 = new Intent(this,D_Activity.class); mIntent = new Intent[]{intent1,intent2,intent3,intent4}; } private void initTabHost() { TabHost tabHost = getTabHost(); for (int i = 0; i < mIntent.length; i++) { tabHost.addTab( tabHost.newTabSpec(mTag[i]).setIndicator(mIndicator[i]).setContent(mIntent[i])); } } }
就此,第一种方式编写完成;运行后看看效果。
第二种:使用自己定义id,就不用继承TabActivity了;我就是在这种方法上犯了些小错误,哈哈这个才是重点。
既然是使用自己定义的Id,那么我们只要改下布局TabHost的Id的就可以,和上面布局代码一致,这里就不全贴出来了。<!--第二种:使用自己定义Id--> <TabHost android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/tabhost">
我们知道TabActivity是继承自ActivityGroup,可以管理多个Activity;如果自定Id的话我们就需要自己调用API来管理这多个Activity,就需要用到LocalActivityManager。下面贴出Java代码:
public class CustomTabActivity extends Activity { private TabHost mTabHost; private String[] mTag = {"tag1","tag2","tag3","tag4"}; private Intent[] mIntent; private String[] mIndicator = {"驾考","学车","买车","百宝箱"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); /* 初始化Intent */ initIntent(); /* 设置TabHost */ initTabHost(savedInstanceState); } private void initIntent() { Intent intent1 = new Intent(this,A_Activity.class); Intent intent2 = new Intent(this,B_Activity.class); Intent intent3 = new Intent(this,C_Acitivity.class); Intent intent4 = new Intent(this,D_Activity.class); mIntent = new Intent[]{intent1,intent2,intent3,intent4}; } private void initTabHost(Bundle savedInstanceState) { mTabHost = (TabHost) findViewById(R.id.tabhost); /* 辅助类来管理多个嵌入式Activity在同一进程中运行 */ LocalActivityManager manager = new LocalActivityManager(this,false); /* 用于恢复Activity的状态,这里传入Activity onCreate()中的Bundle就行了。 */ manager.dispatchCreate(savedInstanceState); /* 设置给TabHost就可以了 */ mTabHost.setup(manager); for (int i = 0; i < mIntent.length; i++) { mTabHost.addTab( mTabHost.newTabSpec(mTag[i]).setIndicator(mIndicator[i]).setContent(mIntent[i])); } } }
运行效果和上图一致,就不贴出来了,可能文中有些东西我理解的不太透彻,还希望各位多多指教。
教程结束
Demo下载:http://download.csdn.net/detail/xyj1576029838/9555975相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories