选项卡介绍

一.TabHost介绍

1. TabHost常用组件
TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡;
TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中;
-- 创建选项卡 : newTabSpec(String tag), 创建一个选项卡;
-- 添加选项卡 : addTab(tabSpec);

2. TabHost使用步骤

a. 定义布局 : 在XML文件中使用TabHost组件, 并在其中定义一个FrameLayout选项卡内容;

b. 继承TabActivity : 显示选项卡组件的Activity继承TabActivity;

c. 获取组件 : 通过调用getTabHost()方法, 获取TabHost对象;

d. 创建添加选项卡 : 通过TabHost创建添加选项卡;

布局文件中TabWidget代表的就是选项卡按钮, Fragement组件代表内容;

二. TabHost布局文件

1. 根标签及id

设置Android自带id : XML布局文件中, 可以使用 标签设置, 其中的id 需要引用 android的自带id : android:[email protected]:id/tabhost ;

getHost()获取前提 : 设置了该id之后, 在Activity界面可以使用 getHost(), 获取这个TabHost 视图对象;

<tabhost android:id="@android:id/tabhost" android:layout_height="match_parent" android:layout_width="match_parent"></tabhost>

2. TabWidget组件

选项卡切换 : 该组件是选项卡切换按钮, 通过点击该组件可以切换选项卡;

设置android自带id : 这个组件的id要设置成android的自带id : android:[email protected]:id/tabs ;

TabHost必备组件 : 该组件与FrameLayout组件是TabHost组件中必备的两个组件;

切换按钮下方显示 : 如果想要将按钮放到下面, 可以将该组件定义在下面, 但是注意,FrameLayout要设置android:layout_widget = 1;

设置TabWidget大小 : 如果想要设置该按钮组件的大小, 可以设置该组件与FrameLayout组件的权重;

示例 :

<tabwidget
android:id="@android:id/tabs"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="horizontal/">
</tabwidget>

3. FrameLayout组件

组件作用 : 该组件中定义的子组件是TabHost中每个页面显示的选项卡, 可以将TabHost选项卡显示的视图定义在其中;

设置android自带id : 这个组件的id要设置成android的自带的id : android:[email protected]:id/tabcontent ;

示例 :
<framelayout
android:id="@android:id/tabcontent"
android:layout_height="fill_parent"
android:layout_weight="1"
android:layout_width="fill_parent">
</framelayout>

二. Activity方法

1. 获取TabHost

获取方法 : getHost();

前提 : 调用getHost()方法获取TabHost组件的方法的前提是在布局文件中,
设置了android自带的id android:[email protected]:id/tabhost 才可以;

2. 创建选项卡

创建选项卡 : 调用TabHost组件的newTabHost(tag), 其中的tag是字符串, 即在选项卡的
唯一标识;

设置选项卡 :

-- 设置按钮名称 : setIndicator(“”);

-- 设置选项卡内容 : setContent(), 可以设置视图组件, 可以设置Activity, 也可以
设置Fragement;

添加选项卡 : tabHost.add(tag), 传入的参数是创建选项卡的时候定义的唯一标识;

三 代码

XML布局文件 :

<!--?xml version=1.0 encoding=utf-8?-->
<tabhost android:id="@android:id/tabhost" android:layout_height="match_parent" android:layout_width="match_parent" xmlns:android="http://schemas.android.com/apk/res/android">

<linearlayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">

<tabwidget android:id="@android:id/tabs" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal/">

<framelayout android:id="@android:id/tabcontent" android:layout_height="fill_parent" android:layout_weight="1" android:layout_width="fill_parent">

<linearlayout android:id="@+id/alwayswet" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">
<imageview android:layout_height="fill_parent" android:layout_width="fill_parent" android:scaletype="fitXY" android:src="@drawable/alwayswet/">
</imageview></linearlayout>

<linearlayout android:id="@+id/isanimal" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">
<imageview android:layout_height="fill_parent" android:layout_width="fill_parent" android:scaletype="fitXY" android:src="@drawable/isanimal/">
</imageview></linearlayout>

<linearlayout android:id="@+id/nezha" android:layout_height="fill_parent" android:layout_width="fill_parent" android:orientation="vertical">
<imageview android:layout_height="fill_parent" android:layout_width="fill_parent" android:scaletype="fitXY" android:src="@drawable/nazha/">
</imageview></linearlayout>

</framelayout>

</tabwidget></linearlayout>

</tabhost>

Activity主界面代码 :
package shuliang.han.tabhost_test;

import android.app.TabActivity;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;

public class MainActivity extends TabActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.tabhost);

TabHost tabHost = getTabHost();

TabSpec page1 = tabHost.newTabSpec(tab1)
.setIndicator("tab1")
.setContent(R.id.isanimal);
tabHost.addTab(page1);

TabSpec page2 = tabHost.newTabSpec(tab2)
.setIndicator("tab2")
.setContent(R.id.alwayswet);
tabHost.addTab(page2);

TabSpec page3 = tabHost.newTabSpec(tab3)
.setIndicator("tab3")
.setContent(R.id.nezha);
tabHost.addTab(page3);
}

}

三.用groupradio代替Tabweight功能

xml文件:
<TabHost
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/bitmap" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >

<TabWidget
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:tabStripEnabled="false"
android:visibility="gone" >
</TabWidget>

<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

<RadioGroup
android:id="@+id/mineradio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/localtab"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/radio_travel"
style="@style/tab_button_bottom"
android:layout_marginLeft="35dp"
android:layout_marginTop="11dp"
android:background="@drawable/btn_travel"
android:checked="true" />

<RadioButton
android:id="@+id/radio_mood"
style="@style/tab_button_bottom"
android:layout_marginLeft="42dp"
android:layout_marginTop="11dp"
android:background="@drawable/btn_mood" />
</RadioGroup>
</FrameLayout>
</LinearLayout>
</TabHost>
其中,将TabWidget设置属性,android:tabStripEnabled="false" android:visibility="gone"
然后将frameLayout中的groupradio代替选项卡选择效果,并在activity中为groupradio设置
监听。

activity文件如下:

public class MineActivity extends TabActivity implements OnCheckedChangeListener {

private TabHost tabHost;
@SuppressWarnings("deprecation")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mine);
tabHost = getTabHost();//获得tabhost
initSpec();//初始化选项卡
((RadioGroup) findViewById(R.id.mineradio))
.setOnCheckedChangeListener (this);// 为radiogroup注册监听
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.mine, menu);
return true;
}

@Override
public void onCheckedChanged(RadioGroup radiogroup, int checkedId) {
switch (checkedId) {

case R.id.radio_travel:
tabHost.setCurrentTabByTag("mine_travel");//通过相应的标记来找到选项卡
break;

case R.id.radio_mood:
tabHost.setCurrentTabByTag("mine_mood");
break;

default:
break;

}
}

public void initSpec(){

tabHost.addTab(this.buildTagSpec("mine_travel", null,
R.drawable.btn_travel,R.id.mytravel ));//R.drawable.btn_travel为另外设置的该选项卡对应的图片,内容后面附上。

tabHost.addTab(this.buildTagSpec("mine_mood", null,
R.drawable.btn_mood, R.id.mymood));
}

/**
* 自定义创建标签项的方法
*
* @param tagName
* 标签标识
* @param tagLable
* 标签文字
* @param icon
* 标签图标
* @param content
* 标签对应的内容
* @return
*/

public TabHost.TabSpec buildTagSpec(String tagName, String tagLable, //选项卡标识符,选项卡外部显示标签,对应的图片,对应的选项卡内容
int icon, int mylayout) {
return tabHost.newTabSpec(tagName)
.setIndicator(tagLable, getResources().getDrawable(icon))
.setContent(mylayout);
}
}

//groupradio监听
public void onCheckedChanged(RadioGroup radiogroup, int checkedId) {
switch (checkedId) {

case R.id.radio_view:
mTabHost.setCurrentTabByTag("mine_travel");//如果选中第一个选项卡,设置选项卡标识符为mine_travel的选项卡内容
break;

case R.id.radio_food:
mTabHost.setCurrentTabByTag("mine_mood");
break;

default:
break;

}
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.local, menu);
return true;
}

btn_travel.xml:(在文件夹drawable中)

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

<item android:drawable="@drawable/food1" android:state_checked="false"></item>
<item android:drawable="@drawable/food2" android:state_checked="true"></item>

</selector>

时间: 2024-11-05 20:44:43

选项卡介绍的相关文章

全网首发 商业级支付宝小程序入门与实战

第1章 课程导学与准备工作 本章主要介绍为何学习支付宝小程序,以及开发支付宝小程序能为我们带来哪些收获.之后会为大家介绍本课程内容具体安排,最后给出如何学好这门课程的一些学习建议.希望大家都能通过这门课程,学有所成,学有所归. 1-1 课程导学 第2章 初识支付宝小程序 本章首先会为大家介绍如何配置开发环境,如何使用蚂蚁开发者工具,随后我们会一起开发第一个hello world小例子,通过对开发工具以及基本文件类型的介绍,让大家快速熟悉支付宝小程序.为后面技术的学习,项目的开发做好基本准备.大家

01-从零开始用IDA做逆向

0x01.IDA是什么 交互式反汇编器专业版(Interactive Disassembler Professional)简称为IDA.IDA Pro是一款支持交互.可编程的.扩展插件.支持多种处理器的逆向工程利器. 0x02.为什么要用IDA Pro? 为什么要用IDA?因为OD是一个只能调试32位程序的调试器.而IDA Pro可以调试32位.64位的程序.除了可以静态反汇编程序,还支持作为调试器对程序调试. 中国人逆向喜欢用OllyDbg:https://ti.360.net/blog/ar

android中用Fragment的简单介绍和创建选项卡详细列子

Fragment要点 Fragment作为Activity界面的一部分组成出现 可以在一个Activity中同时出现多个Fragment,并且,一个Fragment亦可在多个Activity中使用. 在Activity运行过程中,可以添加.移除或者替换Fragment(add().remove().replace()) Fragment可以响应自己的输入事件,并且有自己的生命周期,当然,它们的生命周期直接被其所属的宿主activity的生命周期影响. 设计哲学 Android在3.0中引入了fr

介绍下京东的(选项卡中的选项卡)是怎么实现的

我们都谁知道选项卡是通过数组实现的,那么选项卡中的选项卡无非就是一个二维数组. 道理逻辑很简单,下面是我实现的一个方法: 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>选项卡嵌套选项卡</title> 6 <style type="text/css"> 7 *{ 8 padding: 0;

转载《Android-TabHost 选项卡功能用法详解》

一. TabHost介绍 TabHost组件可以在界面中存放多个选项卡, 很多软件都使用了改组件进行设计; 1. TabHost常用组件 TabWidget : 该组件就是TabHost标签页中上部 或者 下部的按钮, 可以点击按钮切换选项卡; TabSpec : 代表了选项卡界面, 添加一个TabSpec即可添加到TabHost中; -- 创建选项卡 : newTabSpec(String tag), 创建一个选项卡; -- 添加选项卡 : addTab(tabSpec); 2. TabHos

SQL Server 2016 AlwaysOn 安装及配置介绍

SQL Server 2016  AlwaysOn 安装及配置介绍 Always On 可用性组功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案. SQL Server 2012 中引入了 Always On 可用性组功能,此功能可最大程度地提高一组用户数据库对企业的可用性. "可用性组" 针对一组离散的用户数据库(称为"可用性数据库" ,它们共同实现故障转移)支持故障转移环境. 一个可用性组支持一组读写主数据库以及一至八组对应的辅助数据库. (

Android手机使用Fiddler方法介绍(原)

Fiddler是一款免费的抓包.调试工具,比Wireshark要小巧,更简洁,本节就来介绍如何通过WIFI来抓取Android手机的HTTP和HTTPS包. 一.连接Android手机 1.1.手机端配置 电脑配置WIFI后,手机需要设置当前WIFI的代理,而这个代理地址可以通过电脑的"ipconfig"命令得到,如下图所示: 以上的192.168.191.1就是本机的IP地址,然后在手机端的WIFI的高级设置中将代理地址设置为查询到的IP,端口号码自己定义,一会儿要用到,IP代理模式

RichEdit 各个版本介绍

RichEdit是开发中经常使用到的控件,其版本自1.0起,历经好几年,好几次的更新,在此引用一篇介绍RichEdit版本的博文(http://blogs.msdn.com/b/murrays/archive/2006/10/14/richedit-versions.aspx),留个爪印记录下,以备查看. Version Ships ('ed) with dll name 1.0 Windows 95/98/ME/NT riched32.dll 1.0 Exchange 4.0 for Wind

GitHub官方介绍

官方链接地址 http://guides.github.com/activities/hello-world/ Hello World 项目在计算机编程界是一项历史悠久的传统.当你开始学习一些新的东西时,这个项目是一项简单的练习.让我们开始用GitHub开始吧! 你可以学到怎样去做: 创造并使用一个储存库 开始并管理一个新的分支 对一个文件进行改动并且把他们推送到GitHub作为提交 打开并合并一个提取请求 什么是GitHub? GitHub是一个版本控制和协作的代码管理平台.它可以让你和他人在