这边再补充一种更为灵活的方法,可以把TabWidget隐藏,用(RadioGroup+RadioButton)来代替,并利用监听器的方式来实现监听点击点击跳转Activity。

在讲解之前,先补充几点:

1、当我们取得TabHost的实例对象时,我们可以用2种方法来设置当前界面内容(Activity)

查看下API,我们可以找到:

这2个方法,分别是利用页面标志符(int,起始页为0)和页面标签(String)来达到设置当前显示页

我们可以利用这2个方法,在对Radio进行监听点击时跳转到对应的页面。

2、在布局文件XML里,标签RadioGroup的子标签RadioButton里有几个需要注意的地方:

  1、android:button="@null"  这个是用来隐藏系统自身提供的单选按钮样式

  2、android:drawableTop="@drawable/tab_icon1"  这个是用来设置单选按钮的图标(系统默认提供在左边,这个可以把它设置在上面)

  3、android:drawablePadding="3dp"  这个是用来设置按钮图标与按钮标签所在的距离

3、需要把TabWidget设置为隐藏:android:visibility="gone"

为什么说采用这种方法更为灵活呢?

看过我上一篇文章的朋友应该都知道,在上一篇文章里我才采用了自定义的代码布局,需要在JAVA代码里去获取XML布局对象,然后对样式进行设置,而现在利用RadioGroup+RadioButton,我们可以把所有的样式都设置在XML布局文件里,这样更易于维护,在JAVA代码里我们可以更加专注于业务逻辑的代码实现。

好了,接下来上代码吧,由于和上个例子几乎一样,重复部分我就不贴出来了,只贴代码核心部分(注释很全)

package com.example.tabhosttest;

import android.app.ActivityGroup;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView; public class MainActivity extends ActivityGroup{ private TabHost tabHost;//声明一个TabHost对象 private RadioGroup radioGroup;//声明一个RadioGroup对象 //资源文件
private Class activitys[]={TabActivity1.class,TabActivity2.class,TabActivity3.class,TabActivity4.class,TabActivity5.class};//跳转的Activity
private String title[]={"首页","搜索","设置","主题","更多"};//设置菜单的标题
private int image[]={R.drawable.tab_icon1,R.drawable.tab_icon2,R.drawable.tab_icon3,R.drawable.tab_icon4,R.drawable.tab_icon5,};//设置菜单 @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initTabView();//初始化tab标签 } private void initTabView() {
//实例化tabhost
this.tabHost=(TabHost) findViewById(R.id.mytabhost);
//由于继承了ActivityGroup,所以需要在setup方法里加入此参数,若继承TabActivity则可省略
tabHost.setup(this.getLocalActivityManager()); //创建标签
for(int i=0;i<activitys.length;i++){
/*由于采用了RadioGroup,样式已经在xml里设置,故这里无需再自定义view
//实例化一个view作为tab标签的布局
View view=View.inflate(this, R.layout.tab_layout, null); //设置imageview
ImageView imageView=(ImageView) view.findViewById(R.id.image);
imageView.setImageDrawable(getResources().getDrawable(image[i]));
//设置textview
TextView textView=(TextView) view.findViewById(R.id.title);
textView.setText(title[i]); */ //设置跳转activity
Intent intent=new Intent(this, activitys[i]); //载入view对象并设置跳转的activity
TabSpec spec=tabHost.newTabSpec(title[i]).setIndicator(title[i]).setContent(intent); //添加到选项卡
tabHost.addTab(spec);
} radioGroup=(RadioGroup) findViewById(R.id.radiogroup);
radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { @Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch(checkedId){ case R.id.radio1:
//tabHost.setCurrentTab(int id); 用当前所在页数来跳转activity
//tabHost.setCurrentTabByTag(String tag); 用当前标签来跳转activity
tabHost.setCurrentTabByTag(title[0]);
break;
case R.id.radio2:
tabHost.setCurrentTabByTag(title[1]);
break;
case R.id.radio3:
tabHost.setCurrentTabByTag(title[2]);
break;
case R.id.radio4:
tabHost.setCurrentTabByTag(title[3]);
break;
case R.id.radio5:
tabHost.setCurrentTabByTag(title[4]);
break;
} }
}); } }
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mytabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <!-- 需要一个布局管理器 --> <RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent" > <!--
由于TabHost是继承于FrameLayout,所以需要一个FrameLaytout布局(内容页) ,id
必须为tabcontent
--> <FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</FrameLayout> <!-- TabWidget必须标签,用来存放tab标签,且id必须为tabs --> <TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/tab_widget_background"
android:visibility="gone" >
</TabWidget> <RadioGroup
android:id="@+id/radiogroup"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:background="@drawable/tab_widget_background"
android:orientation="horizontal"
android:padding="3dp" > <RadioButton
android:id="@+id/radio1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tab_selector"
android:button="@null"
android:drawablePadding="3dp"
android:drawableTop="@drawable/tab_icon1"
android:gravity="center_horizontal"
android:text="首页"
android:textColor="@android:color/white"
android:textSize="10sp" /> <RadioButton
android:id="@+id/radio2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tab_selector"
android:button="@null"
android:drawablePadding="3dp"
android:drawableTop="@drawable/tab_icon2"
android:gravity="center_horizontal"
android:text="搜索"
android:textColor="@android:color/white"
android:textSize="10sp" /> <RadioButton
android:id="@+id/radio3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tab_selector"
android:button="@null"
android:drawablePadding="3dp"
android:drawableTop="@drawable/tab_icon3"
android:gravity="center_horizontal"
android:text="设置"
android:textColor="@android:color/white"
android:textSize="10sp" /> <RadioButton
android:id="@+id/radio4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tab_selector"
android:button="@null"
android:drawablePadding="3dp"
android:drawableTop="@drawable/tab_icon4"
android:gravity="center_horizontal"
android:text="主题"
android:textColor="@android:color/white"
android:textSize="10sp" /> <RadioButton
android:id="@+id/radio5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@drawable/tab_selector"
android:button="@null"
android:drawablePadding="3dp"
android:drawableTop="@drawable/tab_icon5"
android:gravity="center_horizontal"
android:text="更多"
android:textColor="@android:color/white"
android:textSize="10sp" />
</RadioGroup>
</RelativeLayout> </TabHost>

Android控件-TabHost(二)的更多相关文章

  1. Android控件大全(二)——Toolbar

    1.隐藏Actionbar 代码中设置:requestWindowFeature(Window.FEATURE_NO_TITLE)     //如果Activity是继承自AppCompatActiv ...

  2. Android控件-TabHost(一)

    什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面.     TabHost选项卡,说到这个组件, ...

  3. 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)

    前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...

  4. UIAutomator定位Android控件的方法

    UIAutomator各种控件定位的方法. 1. 背景 使用SDK自带的NotePad应用,尝试去获得在NotesList那个Activity里的Menu Options上面的那个Add note菜单 ...

  5. 一步一步学android控件(之十六)—— CheckBox

    根据使用场景不同,有时候使用系统默认的CheckBox样式就可以了,但是有时候就需要自定义CheckBox的样式.今天主要学习如何自定义CheckBox样式.在CheckBox状态改变时有时需要做一些 ...

  6. Android控件TextView的实现原理分析

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8636153 在前面一个系列的文章中,我们以窗口 ...

  7. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  8. 一步一步学android控件(之六) —— MultiAutoCompleteTextView

    今天学习的控件是MultiAutoCompleteTextView . 提到MultiAutoCompleteTextView 我们就自然而然地想到AutoCompleteTextView ,就想知道 ...

  9. Android控件显示和隐藏

    Android控件都有visibility属性,该属性有三个可能值:visible.invisible.gone.可以通过预设或是Java程序控制这些控件的显示或隐藏. 一.在XML配置文件设置 可见 ...

随机推荐

  1. 05004_Linux的其他命令和权限命令

    1.其他命令 (1)显示当前所在位置 命令:pwd (2)搜索命令 a.命令:grep 要搜索的字符串 要搜索的文件 示例:搜索/etc/sudu.conf文件中包含字符串to的行 b.搜索/etc/ ...

  2. 【BZOJ 1588】 [HNOI2002]营业额统计

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 每天的最小波动值指的是和之前所有天的差值的绝对值中的最小值. 用set.的lower_bound函数. 每次找和他差值最小的数字就好 ...

  3. unix中文件I/O

    在unix中可用的文件I/O函数包含打开文件,读文件,写文件等. Unix系统中的大多数文件I/O须要用到5个函数:open,read,write,lseek,close. 这里要说明的是read,w ...

  4. 怎样解除内容审查程序的password

    如题:怎样解除内容审查程序的password 在不知道password的情况下.通过改动注冊表解决.点击"開始"→"执行",输入"regedit&qu ...

  5. 删除heroku上的数据库记录

    部署本地项目到heroku上.在线上插入数据到数据库,本地代码再次更新到heroku,线上的数据记录还存在单是图片丢失.问题还没有解决: 本地代码和heroku代码怎样同步? heroku使用的pg和 ...

  6. 转一篇关于vuex简单理解的文章

    学习vuex半天摸不着头脑无意间发现了这篇文章 对vuex做了一个简单的阐述比较有助于我的理解 现在分享出来希望能给一些朋友一点帮助  这个是原文地址 http://www.ituring.com.c ...

  7. 安卓开发,adb shell 调试sqlite3数据库

    安卓开发,adb shell 调试sqlite3数据库 在安卓中创建了sqlite3数据库,想要调试怎么办? 通过adb shell来进行查看. 第一步,将adb加入到系统变量中. 这样就可以在命令行 ...

  8. Python: PS 图像调整--黑白

    本文用Python 实现 PS 里的图像调整–黑白,PS 里的黑白并不是简单粗暴的将图像转为灰度图,而是做了非常精细的处理,具体的算法原理和效果图可以参考以前的博客: http://blog.csdn ...

  9. java9新特性-9-语法改进:try语句

    1. 使用举例 在java8 之前,我们习惯于这样处理资源的关闭:     java 8 中,可以实现资源的自动关闭,但是要求执行后必须关闭的所有资源必须在try子句中初始化,否则编译不通过.如下例所 ...

  10. Java类和对象5

    写一个Java应用程序,该应用程序包括2个类:Print类和主类E.Print类里有一个方法output()功能是输出100 ~ 999之间的所有水仙花数(各位数字的立方和等于这个三位数本身,如: 3 ...