TabHost的两种使用方法

2024-05-29 10:38
文章标签 使用 方法 两种 tabhost

本文主要是介绍TabHost的两种使用方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Android 实现tab视图有2种方法,一种就是继承tabactivity,一种是在布局页面中定义<tabhost>标签,

第一种:使用系统自带写好的TabHost(及继承自TabActivity类)

其具体步骤如下:
(1)使用setContentView()方法显示界面。
(2)TabHost对象获得并设置。
(3)创建并设置TabSpec对象。
(4)向TabHost中添加TabSpec完成标签页的使用。

<?xml version="1.0" encoding="utf-8"?>  
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"  android:layout_width="fill_parent"  android:layout_height="fill_parent">  <LinearLayout android:id="@+id/tab1"  android:layout_width="fill_parent" android:layout_height="fill_parent"  androidrientation="vertical">  <TextView android:id="@+id/TextView1"  android:text="This is a tab1" android:layout_width="fill_parent"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  <LinearLayout android:id="@+id/tab2"  android:layout_width="fill_parent" android:layout_height="fill_parent"  androidrientation="vertical">  <TextView android:id="@+id/TextView2"  android:text="This is a tab2" android:layout_width="fill_parent"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  <LinearLayout android:id="@+id/tab3"  android:layout_width="fill_parent" android:layout_height="fill_parent"  androidrientation="vertical">  <TextView android:id="@+id/TextView3"  android:text="This is a tab3" android:layout_width="fill_parent"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  
</FrameLayout> 


import android.app.AlertDialog;  
import android.app.Dialog;  
import android.app.TabActivity;  
import android.content.DialogInterface;  
import android.os.Bundle;  
import android.view.LayoutInflater;  
import android.widget.TabHost;  public class Test_TabWidget extends TabActivity {  /** Called when the activity is first created. */  private TabHost tabHost;  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  // setContentView(R.layout.main);  tabHost = this.getTabHost();  LayoutInflater li = LayoutInflater.from(this);  li.inflate(R.layout.main, tabHost.getTabContentView(), true);  tabHost.addTab(tabHost.newTabSpec("Tab_1").setContent(R.id.tab1)  .setIndicator("TAB1",  this.getResources().getDrawable(R.drawable.img1)));  tabHost.addTab(tabHost.newTabSpec("Tab_2").setContent(R.id.tab2)  .setIndicator("TAB2",  this.getResources().getDrawable(R.drawable.img2)));  tabHost.addTab(tabHost.newTabSpec("Tab_3").setContent(R.id.tab3)  .setIndicator("TAB3",  this.getResources().getDrawable(R.drawable.img3)));  tabHost.setCurrentTab(1);  
//      tabHost.setBackgroundColor(Color.GRAY);  tabHost.setOnTabChangedListener(new TabHost.OnTabChangeListener() {  public void onTabChanged(String tabId) {  Dialog dialog = new AlertDialog.Builder(Test_TabWidget.this)  .setTitle("提示").setMessage(  "选中了" + tabId + "选项卡").setIcon(R.drawable.icon).setPositiveButton("确定", new DialogInterface.OnClickListener(){  public void onClick(DialogInterface dialog,  int which) {  // TODO Auto-generated method stub  }  }).create();  dialog.show();  }  });  }  
}  

第二种:就是定义我们自己的tabHost:不用继承TabActivity。

在自定义TabHost时需要注意,创建TabHost时需要以下3个步骤:
(1)在xml资源文件中创建TabHost节点,并将id设置为tabhost。
(2)创建TabWidget子节点,并设置id为tabs。
(3)创建FrameLayout子节点,用于显示内容,其id为tabcontent。
与使用TabActivity相比较不难发现,自定义TabHost时不需要继承TabActivity了,只需要简单继承Activity就可以了,这无疑给我们编程提供了更大的自由发挥的空间。因为我们知道继承虽然会给我们的编程带来很大程度的方便,但也同样带来了很多的条条   框框的限制。
让我们着重来看第二步获得TabHost对象,这里的获得TabHost对象的方法与使用TabActivity时又不一样了,具体方法为:
m_TabHost = (TabHost)findViewById(android.R.id.tabhost);
我们发现得到TabHost的方法是最简单、最常见的findViewById()方法!这里的参数就是android.R.id.tabhost,也就是在xml资源文件中我们实现定义的:
android:id="@android:id/tabhost"
需要注意的是,在获得了TabHost之后,我们需要调用:
TabHost.setup()
调用了该方法之后,TabHost才设置完成可以正常使用。而在使用TabActvity时则不需这一步,因为在getTabHost()方法中已经完成了设置的工作。
 
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"  android:id="@+id/TabHost01" android:layout_width="fill_parent"  android:layout_height="fill_parent">  <LinearLayout android:layout_width="fill_parent"  android:orientation="vertical" android:layout_height="fill_parent">    <FrameLayout android:id="@android:id/tabcontent"                                      //这里的id一定要是"@android:id/tabcontent"android:layout_width="fill_parent"  android:layout_height="fill_parent">  <LinearLayout android:id="@+id/LinearLayout1"  android:layout_width="fill_parent"  android:layout_height="wrap_content">  <TextView android:text="one"  android:id="@+id/TextView01" android:layout_width="wrap_content"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  <LinearLayout android:id="@+id/LinearLayout2"  android:layout_width="wrap_content"  android:layout_height="wrap_content">  <TextView android:text="two"  android:id="@+id/TextView02" android:layout_width="fill_parent"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  <LinearLayout android:id="@+id/LinearLayout3"  android:layout_width="wrap_content"  android:layout_height="wrap_content">  <TextView android:text="three"  android:id="@+id/TextView03" android:layout_width="fill_parent"  android:layout_height="wrap_content">  </TextView>  </LinearLayout>  </FrameLayout>  <TabWidget android:id="@android:id/tabs"      //注意id表述方式,一定要是"@android:id/tabs"android:layout_width="fill_parent"  android:layout_height="wrap_content" /></LinearLayout> </TabHost>


import android.app.Activity;  
import android.os.Bundle;  
import android.util.Log;  
import android.view.LayoutInflater;  
import android.widget.TabHost;  public class Test_TabHost extends Activity {  /** Called when the activity is first created. */  private TabHost tabHost;  @Override  public void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.main);  try{  tabHost = (TabHost) this.findViewById(R.id.TabHost01);  tabHost.setup();  tabHost.addTab(tabHost.newTabSpec("tab_1")  .setContent(R.id.LinearLayout1)  .setIndicator("TAB1",this.getResources().getDrawable(R.drawable.img1)));  tabHost.addTab(tabHost.newTabSpec("tab_2")  .setContent(R.id.LinearLayout2).setIndicator("TAB2",  this.getResources().getDrawable(R.drawable.img2)));  tabHost.addTab(tabHost.newTabSpec("tab_3")  .setContent(R.id.LinearLayout3).setIndicator("TAB3",  this.getResources().getDrawable(R.drawable.img3)));  tabHost.setCurrentTab(1);  }catch(Exception ex){  ex.printStackTrace();  Log.d("EXCEPTION", ex.getMessage());  }  }  
}  


PS
1、android中的TabActivity是专门用来放置TabHost组件的,但是很遗憾,非常固定,必须放在顶部,对于单手使用手机的人来说,很不方便。所以研究了一下如何将TabBar放置底部,具体思路是在xml布局文件中,将TabWidget放于FrameLayout的下面(两者是垂直线性的关系),并分配各个组件的权重。另外,如果想去掉Tab中那个丑陋的白线,可以通过设置其Padding实现。

2、让自己的类继承TabActivity,然后通过调用getTabHost()方法得到tabhost对象,然后把自己写好的数据展示的布局文件加载到tabhost中,就可以实现了。最后是通过调用addTab()方法添加标签的相关属性(如:标签名称,标签图片,标签内容布局)。
而如果通过XML文件配置tabHost则需要注意的是,framelayout,tabwidget标签的id都必须引用系统的id(@android:id/tabcontent,@android:id/tabs),不然会报异常.在程序用使用findViewById()加载tabhost,然后调用tabhost.setup()方法初始化tabhost,后面的步骤则和上面一种一样

这篇关于TabHost的两种使用方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1013439

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

pdfmake生成pdf的使用

实际项目中有时会有根据填写的表单数据或者其他格式的数据,将数据自动填充到pdf文件中根据固定模板生成pdf文件的需求 文章目录 利用pdfmake生成pdf文件1.下载安装pdfmake第三方包2.封装生成pdf文件的共用配置3.生成pdf文件的文件模板内容4.调用方法生成pdf 利用pdfmake生成pdf文件 1.下载安装pdfmake第三方包 npm i pdfma

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

浅谈主机加固,六种有效的主机加固方法

在数字化时代,数据的价值不言而喻,但随之而来的安全威胁也日益严峻。从勒索病毒到内部泄露,企业的数据安全面临着前所未有的挑战。为了应对这些挑战,一种全新的主机加固解决方案应运而生。 MCK主机加固解决方案,采用先进的安全容器中间件技术,构建起一套内核级的纵深立体防护体系。这一体系突破了传统安全防护的局限,即使在管理员权限被恶意利用的情况下,也能确保服务器的安全稳定运行。 普适主机加固措施:

webm怎么转换成mp4?这几种方法超多人在用!

webm怎么转换成mp4?WebM作为一种新兴的视频编码格式,近年来逐渐进入大众视野,其背后承载着诸多优势,但同时也伴随着不容忽视的局限性,首要挑战在于其兼容性边界,尽管WebM已广泛适应于众多网站与软件平台,但在特定应用环境或老旧设备上,其兼容难题依旧凸显,为用户体验带来不便,再者,WebM格式的非普适性也体现在编辑流程上,由于它并非行业内的通用标准,编辑过程中可能会遭遇格式不兼容的障碍,导致操