13-7-5 android Tabhost功能实现
来源:互联网 发布:淘宝开放接口 编辑:程序博客网 时间:2024/05/16 06:48
开始使用了一个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{@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(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: main07-05 08:59:02.564: E/AndroidRuntime(3502): java.lang.NullPointerException07-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 studio tabhost基础 多功能时钟app 实现时钟功能
- fragment + viewpager 实现tabhost功能
- android tabhost Intent实现
- Fragment实现TabHost标签切换功能
- Fragement替换Tabhost,实现侧滑功能
- android之实现底部TabHost
- Android之Fragment实现TabHost
- android点滴—TabHost实现
- android之实现底部TabHost
- Android:TabHost实现Tab切换
- Android:TabHost实现Tab切换
- tabhost实现android菜单切换
- Android:TabHost实现Tab切换
- Android:TabHost实现Tab切换
- android开发-tabhost实现分页
- Android-TabHost实现Tab切换
- Android - TabHost 选项卡功能用法详解&&TabWidget切换卡的实现应用&&实例说明
- 问题
- WinForm
- static在c语言中的作用
- 【推荐】javascript基础之查找元素(访问节点)
- barbecue生成二维码,比barcode4J要好一些,还可以直接生成在本地
- 13-7-5 android Tabhost功能实现
- (5)WCF配置文件
- 设置ACCESS自动编号的格式
- multimap
- 基于SIFT特征的全景图像拼接
- C#的继承、多态简单小示例
- WCF Ajax交互
- Android源码学习笔记
- C++语法基础--标准IO库--字符串流