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 ...
随机推荐
- 【Node.js 自己封装的库 http_parse, libuv】
[Node.js 自己封装的库 http_parse, libuv] Node.js 介绍:一个网络框架,更多:http://www.oschina.net/p/nodejs 官网:http://no ...
- 基于Adaboost的人脸检测算法
AdaBoost算法是一种自适应的Boosting算法,基本思想是选取若干弱分类器,组合成强分类器.根据人脸的灰度分布特征,AdaBoost选用了Haar特征[38].AdaBoost分类器的构造过程 ...
- python 时间戳 datetime string 转换
import datetime import time **datetime转时间戳** In [1]: now = datetime.datetime.now() In [2]: time.mkti ...
- 调用一个系统命令,并读取它的输出值(使用QProcess.readAll)
下面我们再看一个更复杂的例子,调用一个系统命令,这里我使用的是 Windows,因此需要调用 dir:如果你是在 Linux 进行编译,就需要改成 ls 了. mainwindow.h #ifndef ...
- uva--562Dividing coins +dp
题意: 给定一堆硬币,然后将他们分成两部分,使得两部分的差值最小;输出这个最小的差值. 思路: 想了好久都没想到一个合适的状态转移方程.后面看了别人的题解后,才知道能够转成背包问题求解. 我们将全部的 ...
- 事务不提交,也有可能写redo和数据文件
事务不提交,也有可能写redo和数据文件
- 关于索引删除的策略IndexDeletionPolicy
关于索引删除的策略IndexDeletionPolicy . public IndexWriter(Directory d, Analyzer a, boolean create) ...
- leetcode day6 -- String to Integer (atoi) && Best Time to Buy and Sell Stock I II III
1. String to Integer (atoi) Implement atoi to convert a string to an integer. Hint: Carefully con ...
- pygtk手记(1)
GTK+使用C语言开发,但是其设计者使用面向对象技术. 也提供了C++(gtkmm).Perl.Ruby.Java和Python(PyGTK)绑定,其他的绑定有Ada.D.Haskell.PHP和所有 ...
- poj2226(最小点覆盖)
传送门:Muddy Fields 题意:一个由r行c列方格组成的田地,里面有若干个方格充满泥泞,其余方格都是草.要用长度不限,宽度为1的长木板来覆盖这些泥方格,但不能覆盖草地.最少要用多少个长木板. ...