13-7-5 android Tabhost功能实现
开始使用了一个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功能实现的更多相关文章
- Android定位功能
不说废话,直接说说实现android定位有关的API吧. 这些API都在android.location包下,一共有三个接口和八个类.它们配合使用即可实现定位功能. 三个接口: GpsStatus.L ...
- Android定位功能(二)
在前文Android定位功能(一)中,已经大致介绍了一下在Android平台中,和定位功能相关的类,并举例获取了位置信息.但是前文是基于Criteria定制了一个标准,通过getBestProvide ...
- Android零基础入门第13节:Android Studio配置优化,打造开发利器
原文:Android零基础入门第13节:Android Studio配置优化,打造开发利器 是不是很多同学已经有烦恼出现了?电脑配置已经很高了,但是每次运行Android程序的时候就很卡,而且每次安装 ...
- [译]:Xamarin.Android平台功能——位置服务
返回索引目录 原文链接:Location Services. 译文链接:Xamarin.Android平台功能--位置服务 本部分介绍位置服务以及与如何使用位置提供商服务 Location Servi ...
- Android表情功能
Android表情功能 标签(空格分隔): 未分类 转载自:android edittext插入表情(基于socket方式),并对文中不正确的内容进行整理和修正 [TOC] 涉及知识点: Androi ...
- Android tabhost下的activity怎样获取传来的值
android tabhost下的activity怎样获取传来的值,具体解决方案如下: 解决方案: 其他activity设置intent:Intent intent=new Intent(); int ...
- Cocos2d-x使用android拍照功能加载照片内存过大,通过另存照片尺寸大小解决
使用2dx调用android拍照功能,拍照结束后在2dx界面显示拍照照片,如果不对照片做处理,会出现内存过大的问题,导致程序崩溃,如果仅仅另存拍照照片,则照片质量大小均下降,导致照片不够清晰,后来发现 ...
- Android - TabHost 与 Fragment 制作页面切换效果
Android - TabHost 与 Fragment 制作页面切换效果 Android API 19 , API 23 三个标签页置于顶端 效果图: 在文件BoardTabHost.java中定义 ...
- Android——TabHost(标签容器)相关知识总结贴
android 2.3 r1 中文 api (58) —— TabHost http://www.apkbus.com/android-18911-1-1.html android中文api (5 ...
随机推荐
- js获取上传文件的绝对路径
在html中 <input type="file" id="importFile" /> <input type="bu ...
- 键盘游戏之canvas--用OO方式写
虽然写的不是很好,但 解释权以及版权仍然归13东倍所有! <!DOCTYPE HTML> <html> <head> <title>canvas-00 ...
- Delphi引用C对象文件
C语言应用非常广泛,并在世界各地拥有大量的代码库.这些代码库与Delphi的可比性较小,因此如果我们无需转换为Delphi代码而可以直接使用这些库的部分代码就完美了.幸运的是,Delphi允许连接到C ...
- 引用类中的enum
引用类中的enum 引用类中的enum,需要加类的域class_name::value_in_enum_name 点击(此处)折叠或打开 #include <stdio.h> #inclu ...
- Android---OpenGL ES之添加动作
本文译自:http://developer.android.com/training/graphics/opengl/motion.html 在屏幕上绘制对象是OpenGL的最基本功能,你可以使用其他 ...
- hive编程指南--employees表数据定义
hive编程指南中有个employees表,默认的分隔符比較繁杂,编辑起来不太方便(普通编辑器编辑的控制字符^A等被当成字符串处理了,没有起到分隔符的作用). 收集的解决方式例如以下: http:// ...
- 数据结构——bitmap
近期在看<编程珠玑>这本书. 第1章中引入了bitmap(位图)的数据结构. 曾经没有接触过, 抽出时间研究了一下,记录下来. 书中描写叙述的情景: 1. 最多1000万个7位数电话号码( ...
- SRM 638 Div2
2333... 因为TC过少的参与者.加上不断fst 我掉了div2该. 幸运的是完成的背div1该.. 250 水的问题 500 水的问题.. 直接bfs扩展即可了 注意判重. 我还用康托展开了真 ...
- hdu5179(数位dp)
传送门:beautiful number 题意:令 A=∑ni=1ai?10n?i(1≤ai≤9)(n为A的位数).若A为“漂亮的数”当且仅当对于任意1≤i<n满足a[i]≥a[i+1]且对于任 ...
- c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET
c++ 如何获取系统时间 - zjnig711的信息仓库 - 博客频道 - CSDN.NET c++ 如何获取系统时间 分类: C/C++ 2008-05-08 22:15 14115人阅读 评论(5 ...