开始使用了一个Activity做界面切换,采用visible、gone写法,感觉太麻烦了。

layoutHousehold.setVisibility(View.GONE);
layoutCamera.setVisibility(View.GONE);
layoutEnvironment.setVisibility(View.GONE);
layoutMsg.setVisibility(View.GONE);
layoutSetting.setVisibility(View.GONE);
layoutLight.setVisibility(View.VISIBLE);

一般使用MainActivity集成Activity类的时候,通过setContentView(Layout)设计当前的图层,线程称为主线程,当你在定一个类的时候你是不能更改当前的UI的,也就是说一个Activity UI界面对应一个类,不能使用另外的类进行更改,毕竟更新UI需要主线程来完成,新的类不再主线程中(个人观点)。

那么怎么通过导航栏做Activity切换?使用ViewGroup中的TabHost。

效果:

1、这里我使用了Tabhost:

这里导航栏使用setIndicator不是特别灵活,还有就是自己对setIndicator(View)中的view理解的不对,经常出现让我移除图层的错误,所以采用单击监听事件:

	protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
tabhost = (TabHost) this.findViewById(android.R.id.tabhost);//获取当前的tabhost,注册 tabhost.setup();
tabhost.addTab(tabhost.newTabSpec("tab1")
.setIndicator("tab1")
.setContent(new Intent(this, light.class)));
tabhost.addTab(tabhost.newTabSpec("tab2")
.setIndicator("tab2")
.setContent(new Intent(this, Household.class)));
tabhost.addTab(tabhost.newTabSpec("tab3")
.setIndicator("tab3")
.setContent(new Intent(this, Camera.class)));
tabhost.addTab(tabhost.newTabSpec("tab4")
.setIndicator("tab4")
.setContent(new Intent(this, Environment.class)));
tabhost.addTab(tabhost.newTabSpec("tab5")
.setIndicator("tab5")
.setContent(new Intent(this, Msg.class)));
tabhost.addTab(tabhost.newTabSpec("tab6")
.setIndicator("tab6")
.setContent(new Intent(this, Setting.class)));
tabhost.setCurrentTabByTag("tab1");
ctrlCmd(); }

2、事件监听与图片切换

	/***************************************
* 设定面板邮编图标,单击当前图标会变成绿色,同时加载当前按钮对应的activity
*/
public void ctrlCmd(){
ctrlLight=(ImageView)this.findViewById(R.id.ctrl_light);
ctrlHousehold=(ImageView)this.findViewById(R.id.ctrl_household);
ctrlCamera=(ImageView)this.findViewById(R.id.ctrl_camera);
ctrlEnvironment=(ImageView)this.findViewById(R.id.ctrl_environment);
ctrlMsg=(ImageView)this.findViewById(R.id.ctrl_msg);
ctrlSetting=(ImageView)this.findViewById(R.id.ctrl_setting); ctrlonclick ctrl = new ctrlonclick();
ctrlLight.setOnClickListener(ctrl);
ctrlHousehold.setOnClickListener(ctrl);
ctrlCamera.setOnClickListener(ctrl);
ctrlEnvironment.setOnClickListener(ctrl);
ctrlMsg.setOnClickListener(ctrl);
ctrlSetting.setOnClickListener(ctrl);
}
/************************************************************
* 做一个类用来监听按键的触发程序
* @author hanzhen
*
*/
class ctrlonclick implements OnClickListener{ @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
if(arg0 == ctrlLight){
Log.i(TAG, "------>>> ctrlLight is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light2));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household1));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera1));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment1));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg1));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set1));
tabhost.setCurrentTabByTag("tab1");
}else if(arg0 == ctrlHousehold){
Log.i(TAG, "------>>> ctrlHousehold is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light1));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household2));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera1));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment1));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg1));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set1));
tabhost.setCurrentTabByTag("tab2");
}else if(arg0 == ctrlCamera){
Log.i(TAG, "------>>> ctrlCamera is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light1));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household1));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera2));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment1));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg1));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set1));
tabhost.setCurrentTabByTag("tab3");
}else if(arg0 == ctrlEnvironment){
Log.i(TAG, "------>>> ctrlEnvironment is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light1));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household1));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera1));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment2));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg1));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set1));
tabhost.setCurrentTabByTag("tab4");
}else if(arg0 == ctrlMsg){
Log.i(TAG, "------>>> ctrlMsg is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light1));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household1));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera1));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment1));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg2));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set1));
tabhost.setCurrentTabByTag("tab5");
}else if(arg0 == ctrlSetting){
Log.i(TAG, "------>>> ctrlSetting is pressed");
ctrlLight.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_light1));
ctrlHousehold.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_household1));
ctrlCamera.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_camera1));
ctrlEnvironment.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_environment1));
ctrlMsg.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_msg1));
ctrlSetting.setImageDrawable(getResources().getDrawable(R.drawable.rbtn_set2));
tabhost.setCurrentTabByTag("tab6"); }
}
}

遇上的问题:

当我做好xml的布局文件时,我使用

setContentView(R.layout.main1);

出现了错误:

07-05 08:59:02.539: W/dalvikvm(3502): threadid=1: thread exiting with uncaught exception (group=0x40a521f8)
07-05 08:59:02.564: E/AndroidRuntime(3502): FATAL EXCEPTION: main
07-05 08:59:02.564: E/AndroidRuntime(3502): java.lang.NullPointerException
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.widget.TabWidget.dispatchDraw(TabWidget.java:340)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.View.draw(View.java:10981)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.View.draw(View.java:10981)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
07-05 08:59:02.564: E/AndroidRuntime(3502): at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)

主要是在UI中存在TabHost必须要做处理。

super.onCreate(savedInstanceState);
setContentView(R.layout.main1);
TabHost tabhost = (TabHost) this.findViewById(android.R.id.tabhost);//获取当前的tabhost,注册

	tabhost.setup();
tabhost.addTab(tabhost.newTabSpec("tab1")
.setIndicator("tab1")
.setContent(new Intent(this, light.class)));

13-7-5 android Tabhost功能实现的更多相关文章

  1. Android定位功能

    不说废话,直接说说实现android定位有关的API吧. 这些API都在android.location包下,一共有三个接口和八个类.它们配合使用即可实现定位功能. 三个接口: GpsStatus.L ...

  2. Android定位功能(二)

    在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...

  3. Android零基础入门第13节:Android Studio配置优化,打造开发利器

    原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装 ...

  4. [译]:Xamarin.Android平台功能——位置服务

    返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...

  5. Android表情功能

    Android表情功能 标签(空格分隔): 未分类 转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正 [TOC] 涉及知识点: Androi ...

  6. Android tabhost下的activity怎样获取传来的值

    android tabhost下的activity怎样获取传来的值,具体解决方案如下: 解决方案: 其他activity设置intent:Intent intent=new Intent(); int ...

  7. Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决

    使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...

  8. Android - TabHost 与 Fragment 制作页面切换效果

    Android - TabHost 与 Fragment 制作页面切换效果 Android API 19 , API 23 三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义 ...

  9. Android——TabHost(标签容器)相关知识总结贴

    android 2.3 r1 中文 api (58) —— TabHost http://www.apkbus.com/android-18911-1-1.html   android中文api (5 ...

随机推荐

  1. OpenCV五学习: 如何使用命令来启动或关闭OpenCV的CPU指令系统CV_SSE2,CV_SSSE4和其他优化

    在这个博客.我想分享一下OpenCV源代码CPU指令系统CV_SSE2和其他相关知识 一个.    CV_SSE系列指令集的预编译符号定义在opencv2/core/internal.hpp这个头文件 ...

  2. [面经] 南京SAP面试(上)

    背景 博主乃985弱校的小硕一枚,在南京某外企工作了两年,如今的公司还不错,待遇还行,做的东西也比較有意思.在南京这个地方,给力的公司不太多,仅仅要是跟亲戚朋友聊到我在南京做IT,无一例外都会问&qu ...

  3. gradle学习系列之eclipse中简单构建android项目

    看不到图片能够去訪问这个网址看看:http://pan.baidu.com/s/1o6FrFkA 一.什么是Gradle 官网www.gradle.org上介绍Gradle是升级版(evolved)的 ...

  4. Android本地视频播放器开发--简易播放器原型

    在以前的基础上,将音视频进行合并,音频播放采用OpenSL ES,视频播放采用OpenGL ES2.0进行显示,这次的版本其中音频和视频是在同一个线程,会造成音频断断续续,后续会采用音频使用SDL,视 ...

  5. dsp下基于双循环缓冲队列的视频采集和显示记录

    对最近在设计的视频采集和显示缓冲机制做一个记录,以便以后使用. 视频采集和显示缓冲机制,其实是参考了Linux下v4L2的驱动机制,其采用输入多缓冲frame,输出多缓冲的切换机制.简单的就是ping ...

  6. c语言数组应用--统计随机数并打印直方图

    C标准库中生成伪随机数的是rand函数,使用这个函数需要包含头文件stdlib.h,它没有参数,返回值是一个介于0和RAND_MAX之间的接近均匀分布的整数.RAND_MAX是该头文件中定义的一个常量 ...

  7. Spring MVC Hello World Example(转)

    Spring 3 You may interest at this Spring 3 MVC hello world example. In Spring MVC web application, i ...

  8. CF 518D(概率dp)

    传送门:Ilya and Escalator 题意:有n个人排队进车厢,每秒只能进一个人,而且第1个人进了后面的人才能进,第一个人每秒进入车厢的概率为p,不进的概率为1-p,求t秒后进入车厢总人数的数 ...

  9. win 开机 Microsoft corparation 滚动栏

    在easybcd里设置  后保存!

  10. Android设计模式(二)--策略模式

    1.定义: The Strategy Pattern defines a family of algorithms,encapsulates each one,and makes them inter ...