Tabhost用法

使用方法一:使用同一个布局文件

在xml中如此定义tabhost:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.hello.MainActivity" >

<TabHost

android:id="@+id/mytabhost"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentBottom="true"

android:layout_alignParentLeft="true" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TabWidget

android:id="@android:id/tabs"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

</TabWidget>

<FrameLayout

android:id="@android:id/tabcontent"

android:layout_width="match_parent"

android:layout_height="match_parent" >

<LinearLayout

android:id="@+id/tab1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/text1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="hellllllll"></TextView>

</LinearLayout>

<LinearLayout

android:id="@+id/tab2"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<TextView

android:id="@+id/text2"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="hellllllll"></TextView>

</LinearLayout>

<LinearLayout

android:id="@+id/tab3"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<ImageView

android:id="@+id/img1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher"/>

</LinearLayout>

</FrameLayout>

</LinearLayout>

</TabHost>

</RelativeLayout>

对应的activity中这么写:

public class Tabs extends ActionBarActivity{

TabHost tabHost=null;

TabSpec spec=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

// TODO Auto-generated method stub

super.onCreate(savedInstanceState);

setContentView(R.layout.tabs);

tabHost=(TabHost)findViewById(R.id.mytabhost);

tabHost.setup();//这句必须写,不然崩溃

//实现标签、id、设置content,三者缺一不可,最后将其添加到tabhost

spec=tabHost.newTabSpec("tag1");

spec.setIndicator("课程");

spec.setContent(R.id.tab1);

tabHost.addTab(spec);

spec=tabHost.newTabSpec("tag2");

spec.setIndicator("论坛");

spec.setContent(R.id.tab2);

tabHost.addTab(spec);

spec=tabHost.newTabSpec("tag3");

spec.setIndicator("我的");

spec.setContent(R.id.tab3);

tabHost.addTab(spec);

}

}

也可以通过以下java代码创建一个新的tab

spec=tabHost.newTabSpec("tag4");

spec.setContent(new TabHost.TabContentFactory() {

@Override

public View createTabContent(String tag) {

// TODO Auto-generated method stub

TextView textView=new TextView(Tabs.this);

textView.setText("123456");

return textView;

}

});

spec.setIndicator("new");

tabHost.addTab(spec);

设置content的三种方式:

1)  使用布局文件

2)  用TabHost.TabContentFactory(如上面的java代码)

3)  用启动另一个布局的intent对象

以上三者均可以作为setContent的参数

设置indicator

可以是字符串、布局文件、图片。

注意:

1)  xml中FrameLayout中定义的布局,要都使用,如果不是用的话就会造成,未使用的布局和其他标签重合的现象。如下:

使用方法二:每个tab用不同的布局文件,使用LayoutInflater动态加载

Xml:

Tab1:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.tabhost.MainActivity"

android:orientation="vertical"

android:id="@+id/tab1">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/app_name" />

</LinearLayout>

Tab2:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.tabhost.MainActivity"

android:orientation="vertical"

android:id="@+id/tab2">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="第二个tab" />

</LinearLayout>

activity_main.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.example.tabhost.MainActivity" >

<TabHost

android:id="@+id/tabhost"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_alignParentLeft="true"

android:layout_alignParentTop="true"

android:layout_marginTop="22dp" >

<LinearLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TabWidget

android:id="@android:id/tabs"

android:layout_width="match_parent"

android:layout_height="wrap_content" >

</TabWidget>

<FrameLayout

android:id="@android:id/tabcontent"

android:layout_width="match_parent"

android:layout_height="match_parent" >

</FrameLayout>

</LinearLayout>

</TabHost>

</RelativeLayout>

Activity:

MainActivity:

package com.example.tabhost;

import android.support.v7.app.ActionBarActivity;

import android.text.Layout;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.ViewGroup;

import android.widget.TabHost;

public class MainActivity extends ActionBarActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

TabHost tabHost=(TabHost)findViewById(R.id.tabhost);

tabHost.setup();

LayoutInflater inflater=LayoutInflater.from(this);

inflater.inflate(R.layout.tab1, tabHost.getTabContentView());//getTabContentView返回framelayout对应的view

inflater.inflate(R.layout.tab2, tabHost.getTabContentView());

tabHost.addTab(tabHost.newTabSpec("状元").setContent(R.id.tab1).setIndicator("状元"));

tabHost.addTab(tabHost.newTabSpec("榜眼").setContent(R.id.tab2).setIndicator("榜眼"));

}

}

使用方法三:继承TabActivity

Xml:

继承tabActivity后只需要把用到的各个tab布局写好,跟标签一般是FrameLayout也试过LinearLayout也可以

<FrameLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:tools="http://schemas.android.com/tools"

android:id="@android:id/tabcontent"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<LinearLayout

android:id="@+id/tab1"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical" >

<TextView

android:id="@+id/text1"

android:layout_width="match_parent"

android:layout_height="match_parent"

          android:text="hellllllll"></TextView>

</LinearLayout>

<LinearLayout

android:id="@+id/tab2"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<TextView

android:id="@+id/text2"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:text="hemmmmmmm">

</TextView>

</LinearLayout>

<LinearLayout

android:id="@+id/tab3"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

<ImageView

android:id="@+id/img1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/ic_launcher"/>

</LinearLayout>

</FrameLayout>

Activity:

package com.example.tab;

import android.support.v7.app.ActionBarActivity;

import android.app.TabActivity;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.ImageView;

import android.widget.TabHost;

import android.widget.TabHost.TabSpec;

public class MainActivity extends TabActivity {

TabHost tabHost=null;

TabSpec spec=null;

ImageView imageView=null;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

tabHost=getTabHost();//和第一种方法不同在于直接用getTabHost获得tabhost

//且不用调用setup()函数

LayoutInflater.from(this).inflate(R.layout.activity_main, tabHost.getTabContentView());

spec=tabHost.newTabSpec("tag1");

spec.setIndicator("课程",getResources().getDrawable(R.drawable.picture));

spec.setContent(R.id.tab1);

tabHost.addTab(spec);

spec=tabHost.newTabSpec("tag2");

spec.setIndicator("论坛");

spec.setContent(R.id.tab2);

tabHost.addTab(spec);

spec=tabHost.newTabSpec("tag3");

spec.setIndicator("我的");

spec.setContent(R.id.tab3);

tabHost.addTab(spec);

imageView=(ImageView)findViewById(R.id.img1);

}

}

监听事件

标签切换监听:

tabHost.setOnTabChangedListener(new OnTabChangeListener() {

@Override

public void onTabChanged(String tabId) {

// TODO Auto-generated method stub

//tabid对应于newTabSpec("tag2")设置的这个标签可

//用”tag2”.equals(tabid)判读按并处理

}

});

参考:http://blog.csdn.net/harvic880925/article/details/17120325

tabhost使用的更多相关文章

  1. android 使用Tabhost 发生could not create tab content because could not find view with id 错误

    使用Tabhost的时候经常报:could not create tab content because could not find view with id 错误. 总结一下发生错误的原因,一般的 ...

  2. Android 轮换页面+TabHost 实例

    最终效果展示: 首先我们需要一个ViewPager控件,不过可以发现在左侧的控件列表中并没有这个控件 这时我们要去升级包中查看 然后在厘米找到 ViewPager.class 这时我们双击这个发现不能 ...

  3. tabhost 下 setOnItemClickListener失效的问题

    分析了一下代码,应该是tabhost 的ontabchangedListener接管了下面应该由setOnItemClickListener接管的部分,导致不能相应setOnItemClickList ...

  4. 安卓初級教程(5):TabHost的思考

    package com.myhost; import android.os.Bundle; import android.view.LayoutInflater; import android.wid ...

  5. Android 实现分页(使用TabWidget/TabHost)

    注:本文为转载,但该内容本人已亲身尝试,确认该方法可行,代码有点小的改动,转载用作保存与分享. 原作者地址:http://gundumw100.iteye.com/blog/853967 个人吐嘈:据 ...

  6. 安卓TabHost页面

    <?xml version="1.0" encoding="UTF-8"?> <!-- TabHost组件id值不可变--> <T ...

  7. Android TabHost使用

    TabHost是Android中自带的选项卡控件,效果图如下: 主布局文件 <RelativeLayout xmlns:android="http://schemas.android. ...

  8. tab使用 TabActivity TabHost Tabspec常用方法

    本文是参考Android官方提供的sample里面的ApiDemos的学习总结.   TabActivity   首先Android里面有个名为TabActivity来给我们方便使用.其中有以下可以关 ...

  9. Android工作学习第5天之TabHost实现菜单栏底部显示

    TabHost是一个装载选项卡窗口的容器,实现分模块显示的效果.像新浪微博客户端.微信客户端都是使用tabehost组件来开发的. TabHost的组成: |---TabWidget:实现标签栏,可供 ...

随机推荐

  1. Oracle通过一个Value值查询数据库

    ---恢复内容开始--- 大家在想看看数据库中有哪些数据表中,哪些字段中有“helloworld” 这个字符串,现在数据库所有的表,视图都不能直接提供,所有必须通过循环去访问所有的数据表,所有的字段列 ...

  2. WebAPI返回数据类型解惑

    本文来自:http://www.cnblogs.com/lzrabbit/archive/2013/03/19/2948522.html 最近开始使用WebAPI,上手很容易,然后有些疑惑 1.Web ...

  3. CentOS_7.2安装Nginx_1.9

    一.安装依赖包和开发工具: yum install vim vim-enhanced wget zip unzip telnet ntsysv compat* apr* nasm* gcc gcc* ...

  4. Python:dict用法

    dict全称dictionary,使用键-值(key-value)存储,有极快的查找速度. 以下整理几种常用的dict用法 定义 空dict >>> dict={} 普通dict & ...

  5. pandas保存excel

    没有matlab那样的保存中间变量可以用jupyter创建文件然后在pycharm中打开但是字体很奇怪- -所以还是用excel的中间文件方式#测试涨停# ret = asc.getPctChange ...

  6. ElasticSearch集群配置

    因机器有限,本文只做单机3个节点的集群测试. 1.集群测试信息 elasticsearch版本:elasticsearch-2.4.1 windowns版本:win10 2.解压elasticsear ...

  7. javascript 中继承实现方式归纳

    转载自:http://sentsin.com/web/1109.html 不同于基于类的编程语言,如 C++ 和 Java,javascript 中的继承方式是基于原型的.同时由于 javascrip ...

  8. 告别IT,出售多年自己研发的股票分析系统源码

    不知已过而立,发狠告别IT,回头看看以前自己的多个作品,耗时最多的就是这个股票分析系统了,留在自己的电脑里也体现不出多大价值了,故打算出售源码给需要的人,联系方式QQ:874724605 注明:股票源 ...

  9. 【Python③】python基本数据类型,变量和常量

    基本数据类型 Python中,能直接处理的数据类型有以下几种: 整数 Python可以处理任意大小的整数,包括负整数,程序中的写法和数学上的一样,例如:6,-666,8888…… 计算机使用二进制,所 ...

  10. "$cond"

    db.items.aggregate([ { "$project": { "name": 1, "customfield": { " ...