TabHost是整个Tab的容器,包含TabWidget和FrameLayout两个部分,TabWidget是每个Tab的表情(图标效果),FrameLayout是Tab内容
实现方式有两种:
1、继承TabActivity
2、继承Activity类
方法一:继承TabActivity
从TabActivity中用getTabHost()方法获取TabHost,然后设置标签内容
布局:
1、TabHost 必须设置android:id为@android:id/tabhost
2、TabWidget 必须设置android:id为@android:id/tabs
3、FrameLayout 必须设置android:id为@android:id/tabcontent
这几个都是系统自带id,最好是快捷键联想生成,不要手写,这样不容易出错
XML布局文件:
1 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 2 android:layout_width="match_parent" 3 android:layout_height="match_parent" 4 android:id="@android:id/tabhost" 5 > 6 7 <LinearLayout 8 android:layout_width="match_parent" 9 android:layout_height="match_parent" 10 android:orientation="vertical" 11 > 12 13 14 15 <FrameLayout 16 android:layout_width="match_parent" 17 android:layout_height="0dp" 18 android:layout_weight="1" 19 android:id="@android:id/tabcontent" 20 > 21 <LinearLayout 22 android:layout_width="match_parent" 23 android:layout_height="match_parent" 24 android:id="@+id/widget_layout_red" 25 android:background="#ff0000" 26 android:orientation="vertical" 27 ></LinearLayout> 28 29 <LinearLayout 30 android:layout_width="match_parent" 31 android:layout_height="match_parent" 32 android:id="@+id/widget_layout_yellow" 33 android:background="#FCD209" 34 android:orientation="vertical" 35 ></LinearLayout> 36 37 </FrameLayout> 38 <TabWidget 39 android:layout_width="match_parent" 40 android:layout_height="wrap_content" 41 android:id="@android:id/tabs" 42 android:background="@mipmap/ic_launcher" 43 > 44 45 </TabWidget> 46 </LinearLayout> 47 </TabHost>
Java代码实现:
1 public class MainActivity extends TabActivity {
2 private TabHost tabhost;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_main);
7
8 //从TabActivity上面获取放置Tab的TabHost
9 tabhost = getTabHost();
10
11 tabhost.addTab(tabhost
12 //创建新标签one
13 .newTabSpec("one")
14 //设置标签标题
15 .setIndicator("红色")
16 //设置该标签的布局内容
17 .setContent(R.id.widget_layout_red));
18 tabhost.addTab(tabhost.newTabSpec("two").setIndicator("黄色").setContent(R.id.widget_layout_yellow));
19 }
20 }
实现效果如下:


方法二:继承Activity类
布局:
1、TabHost 可自定义id
2、TabWidget 必须设置android:id为@android:id/tabs
3、FrameLayout 必须设置android:id为@android:id/tabcontent
XML布局:
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/zidingyi"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@android:id/tabcontent"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/widget_layout_red"
android:background="#ff0000"
android:orientation="vertical"
></LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/widget_layout_yellow"
android:background="#FCD209"
android:orientation="vertical"
></LinearLayout>
</FrameLayout>
<TabWidget
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@android:id/tabs"
android:background="@mipmap/ic_launcher"
>
</TabWidget>
</LinearLayout>
</TabHost>
java代码实现:
public class MainActivity extends Activity {
private TabHost tabhost;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到TabHost对象实例
tabhost =(TabHost) findViewById(R.id.ho);
//调用 TabHost.setup()
tabhost.setup();
//创建Tab标签
tabhost.addTab(tabhost.newTabSpec("one").setIndicator("红色").setContent(R.id.widget_layout_red));
tabhost.addTab(tabhost.newTabSpec("two").setIndicator("黄色").setContent(R.id.widget_layout_yellow));
}
}
自定义选项卡
很多时候系统自带的样式并不能满足我们的使用,就像QQ下面的选项栏有两种状态,点击时是一种图片效果,未点击时又是一种图片效果,下面记录一下怎么自定义选项卡,这里只实现了最左边的点击效果
效果图:

XML布局:(浅蓝色背景的是三个不同界面的布局内容,可以忽略。绿色背景是比较重要,但是容易被忽视的属性)
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Mytab"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<RelativeLayout
android:id="@+id/one"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f5f5f9"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/too"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00a2ac">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="15dp"
android:gravity="center"
android:text="设置"
android:textColor="#ffffff" />
</android.support.v7.widget.Toolbar>
<TextView
android:id="@+id/text_1"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@+id/too"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_1"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_3"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_2"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_4"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_3"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_4"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_6"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_5"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_7"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@+id/text_6"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_8"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_7"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_9"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_8"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_10"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@+id/text_9"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_11"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_10"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_12"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_11"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_13"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_12"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_14"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_13"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_15"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_14"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_16"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_15"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_17"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@+id/text_16"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_18"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_17"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_19"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_18"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_20"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@+id/text_19"
android:layout_marginTop="20dp"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_21"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_20"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_22"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_21"
android:background="#f3f3f3" />
<TextView
android:id="@+id/text_23"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/text_22"
android:background="#ffffff"
android:drawableRight="@mipmap/a2"
android:padding="20px"
android:text="服务大厅"
android:textColor="#000000" />
<TextView
android:id="@+id/text_24"
android:layout_width="wrap_content"
android:layout_height="1px"
android:layout_below="@id/text_23"
android:background="#f3f3f3" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/two"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/a3"
android:orientation="vertical">
</RelativeLayout>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/three"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#00A2AC"
android:gravity="center_vertical"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="15dp"
android:text="其他登录方式"
android:textColor="#FFFFFF" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/x" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="170dp"
android:background="#00A2AC"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:layout_width="200dp"
android:layout_height="100dp"
android:src="@mipmap/x1" />
<ImageView
android:layout_width="200dp"
android:layout_height="50dp"
android:layout_marginBottom="20dp"
android:src="@mipmap/x2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="贷款,其实是一件小事"
android:textSize="22sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="15dp"
android:text="为微小型企业,经营者提供便捷的贷款服务"
android:textColor="#CDCDCD" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginLeft="20dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:text="无抵押 / 审核快 / 期限灵活"
android:textColor="#00A2AC"
android:textSize="22sp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="5dp"
android:background="#CDCDCD" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="150dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="选择不必太多,理财合适就好"
android:textSize="22sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="15dp"
android:text="精选理财铲平,资金安全更安心"
android:textColor="#CDCDCD" />
</LinearLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_marginLeft="20dp"
android:background="#FFFFFF"
android:gravity="center_vertical"
android:text="安全投资 / 收益稳健 / 周转灵活"
android:textColor="#F76D2B"
android:textSize="22sp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ta行app转账攻略" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="15家银行转账操作指南" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="资讯"
android:textColor="#00A2AC" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/b1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ta行app转账攻略" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="15家银行转账操作指南" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="资讯"
android:textColor="#00A2AC" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/b1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:gravity="center_horizontal"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center_vertical"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ta行app转账攻略" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="15家银行转账操作指南" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="资讯"
android:textColor="#00A2AC" />
</LinearLayout>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/b1" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</ScrollView>
</FrameLayout>
<TabWidget
android:id="@android:id/tabs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"></TabWidget>
<RadioGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#f3f3f3"
android:gravity="center"
android:orientation="horizontal">
<RadioButton
android:id="@+id/radio_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/agt"
android:gravity="center"
android:paddingTop="20px"
android:text="叮咚" />
<RadioButton
android:id="@+id/radio_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/a1"
android:paddingTop="20px" />
<RadioButton
android:id="@+id/radio_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:button="@null"
android:drawableTop="@mipmap/a1"
android:paddingTop="20px" />
</RadioGroup>
</LinearLayout>
</TabHost>
java代码
package com.contentprovide.liuliu.relayout;
import android.content.Intent;
import android.support.annotation.IdRes;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TabHost;
public class MainActivity extends AppCompatActivity {
TabHost Mytab;
RadioButton radio_one, radio_two, radio_three;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
radio_one = (RadioButton) findViewById(R.id.radio_one);
radio_two = (RadioButton) findViewById(R.id.radio_two);
radio_three = (RadioButton) findViewById(R.id.radio_three);
Mytab = (TabHost) findViewById(R.id.Mytab);
Mytab.setup();
Mytab.addTab(Mytab.newTabSpec("one").setIndicator("").setContent(R.id.one));
Mytab.addTab(Mytab.newTabSpec("two").setIndicator("").setContent(R.id.two));
Mytab.addTab(Mytab.newTabSpec("three").setIndicator("").setContent(R.id.three));
//给每个RadioButton都添加点击事件,每个按钮就相当于选项卡
radio_one.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Mytab.setCurrentTab(2);
radio_one.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.mipmap.ai7, 0, 0);//设置点击时的图标
}
});
radio_two.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Mytab.setCurrentTab(1);
radio_one.setCompoundDrawablesRelativeWithIntrinsicBounds(0, R.mipmap.agt, 0, 0);//
}
});
radio_three.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Mytab.setCurrentTab(0);
}
});
}
}
如果觉得我这篇记录得不是很清晰需要拓展TabHost样式的也可以看看http://www.cnblogs.com/lichenwei/p/3975095.html,我之前看过的一篇博客,内容写得挺详细的
来源:https://www.cnblogs.com/lyd447113735/p/8203232.html