TabHost底部菜单的实现

TabHost底部菜单的实现

一、简介

底部菜单栏是各种Android应用中常用的布局。如新浪微博,qq空间,微信等应用都有用到底部菜单栏。

底部菜单选项卡主要是通过TabHost和RadioGroup实现的。

二、TabHost和RadioGroup的使用

请看具体代码实现:

1、activit_main.xml   主页面布局的实现

需要注意的是,如果用TabHost这个控件,其中有几个ID是必须这么写的,android:id="@android:id/tabhost   ;android:id="@android:id/tabcontent" ;android:id="@android:id/tabs" ;之所以要这么写是因为在TabHost这个类中需要实例化上述这个ID的控件。看源码:

<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@android:id/tabhost"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    tools:context=".MainActivity" >

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

        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="1.0" >
        </FrameLayout>

        <TabWidget
            android:id="@android:id/tabs"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.0"
            android:visibility="gone" />

        <RadioGroup
            android:id="@+id/main_radio"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="@drawable/market_sng_me_bg"
            android:gravity="center_vertical"
            android:orientation="horizontal" >

            <RadioButton
                android:id="@+id/radio_button0"
                style="@style/main_btn_style"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2.0dip"
                android:layout_weight="1"
                android:drawableTop="@drawable/tabbar_home"
                android:tag="radio_button0"
                android:text="@string/main_page" />

            <RadioButton
                android:id="@+id/radio_button1"
                style="@style/main_btn_style"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2.0dip"
                android:layout_weight="1"
                android:drawableTop="@drawable/tabbar_message_center"
                android:tag="radio_button1"
                android:text="@string/message" />

            <RadioButton
                android:id="@+id/radio_button2"
                style="@style/main_btn_style"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2.0dip"
                android:layout_weight="1"
                android:drawableTop="@drawable/tabbar_add" />

            <RadioButton
                android:id="@+id/radio_button3"
                style="@style/main_btn_style"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2.0dip"
                android:layout_weight="1"
                android:drawableTop="@drawable/tabbar_discover"
                android:tag="radio_button3"
                android:text="@string/discover" />

            <RadioButton
                android:id="@+id/radio_button4"
                style="@style/main_btn_style"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="2.0dip"
                android:layout_weight="1"
                android:drawableTop="@drawable/tabbar_profile"
                android:tag="radio_button4"
                android:text="@string/profile" />
        </RadioGroup>
    </LinearLayout>

</TabHost>

2、style.xml 样式布局文件

<resources>
    <style name="main_btn_style">
        <item name="android:button">@null</item>
        <item name="android:gravity">center_horizontal</item>
        <item name="android:textSize">12sp</item>
        <item name="android:drawablePadding">4dp</item>
    </style>
</resources>

button值设置为@null就不会出现radioButton的按钮了。

3、MainActivity.java

package com.demo.tabhost;

import android.app.TabActivity;
import android.content.Intent;
import android.os.Bundle;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TabHost;

public class MainActivity extends TabActivity {
	private RadioGroup main_radio;
	private RadioButton tab_home, tab_message, tab_add, tab_discover,
			tab_profile;
	private TabHost mHost;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mHost = this.getTabHost();
		// 添加N个tab选项卡,定义他们的tab名,指示名,目标屏对应的类。
		mHost.addTab(mHost.newTabSpec("one").setIndicator("1")
				.setContent(new Intent(this, HomeActivity.class)));
		mHost.addTab(mHost.newTabSpec("two").setIndicator("2")
				.setContent(new Intent(this, MessageActivity.class)));
		mHost.addTab(mHost.newTabSpec("three").setIndicator("3")
				.setContent(new Intent(this, AddActivity.class)));
		mHost.addTab(mHost.newTabSpec("four").setIndicator("4")
				.setContent(new Intent(this, DiscoverActivity.class)));
		mHost.addTab(mHost.newTabSpec("five").setIndicator("5")
				.setContent(new Intent(this, ProfileActivity.class)));

		main_radio = (RadioGroup) findViewById(R.id.main_radio);
		tab_home = (RadioButton) findViewById(R.id.radio_button0);
		tab_message = (RadioButton) findViewById(R.id.radio_button1);
		tab_add = (RadioButton) findViewById(R.id.radio_button2);
		tab_discover = (RadioButton) findViewById(R.id.radio_button3);
		tab_profile = (RadioButton) findViewById(R.id.radio_button4);
		main_radio
				.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
					public void onCheckedChanged(RadioGroup group, int id) {
						switch (id) {
						case R.id.radio_button0:
							mHost.setCurrentTabByTag("one");
							break;
						case R.id.radio_button1:
							mHost.setCurrentTabByTag("two");
							break;
						case R.id.radio_button2:
							mHost.setCurrentTabByTag("three");
							break;
						case R.id.radio_button3:
							mHost.setCurrentTabByTag("four");
							break;
						case R.id.radio_button4:
							mHost.setCurrentTabByTag("five");
							break;
						}
					}
				});
	}

}

加载布局,添加tab选项卡,定义他们的tab名,指示名,目标屏对应的类

4、另外还有是个tab选项卡对应的Activity类和相对应的布局文件xml这里就不一一贴出代码了。

时间: 2024-10-11 06:02:21

TabHost底部菜单的实现的相关文章

转-TabHost组件(二)(实现底部菜单导航)

http://www.cnblogs.com/lichenwei/p/3975095.html 上面文章<安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航)>中提到了利用自定义View(ImageView+TextView)来设置一个底部菜单的样式 这边再补充一种更为灵活的方法,可以把TabWidget隐藏,用(RadioGroup+RadioButton)来代替,并利用监听器的方式来实现监听点击点击跳转Activity. 在讲解之前,先补充几点: 1.当我们取得TabHost的

转-TabHost组件(一)(实现底部菜单导航)

http://www.cnblogs.com/lichenwei/p/3974009.html 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先说一件事情,翻翻谷歌提供给我们的API,我们可以发现这样的一段话: 它告诉我们,这个组件在安卓4.0之后已经被废弃了,建议我们新的程序应该使用Fragment组件来代替它. 其实并不出乎意料,使用过Tab

安卓开发复习笔记——TabHost组件(实现底部菜单导航)

安卓开发复习笔记——TabHost组件(实现底部菜单导航) 4 来源:cnblog    阅读:1048   时间:2014-09-16 什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件,不得不先说一件事情,翻翻谷歌提供给我们的API,我们可以发现这样的一段话: 它告诉我们,这个组件在安卓4.0之后已经被废弃了,建议我们新的程序应该使用Fragment组件

安卓开发复习笔记——Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+ViewPager组件(高仿微信界面)也介绍过,这里就不再重复阐述了. 国际惯例,先来张效果图: 下面

转-Fragment+FragmentTabHost组件(实现新浪微博底部菜单)

http://www.cnblogs.com/lichenwei/p/3985121.html 记得之前写过2篇关于底部菜单的实现,由于使用的是过时的TabHost类,虽然一样可以实现我们想要的效果,但作为学习,还是需要来了解下这个新引入类FragmentTabHost 之前2篇文章的链接: 安卓开发复习笔记——TabHost组件(一)(实现底部菜单导航) 安卓开发复习笔记——TabHost组件(二)(实现底部菜单导航) 关于Fragment类在之前的安卓开发复习笔记——Fragment+Vie

Android应用主界面底部菜单实现

介绍 现在绝大多数主流的应用主界面,都会包含一个底部菜单,就拿腾讯的QQ与微信来说,看起来是这样的  <---我是底部菜单 原理 在很久以前,可以通过TabActivity实现相关功能,自从Fragment出来后,就被抛弃了. 原理也很简单 1.底部菜单通过自定义RadioGroup实现,通过setOnCheckedChangeListener监听切换内容. 2.内容切换,可以使用ViewPager(可以实现直接滑动切换),TabHost,FragmentManager来实现.. PS:类似的,

Android项目开发实战之使用Fragment和FragmentTabHost搭建底部菜单(一)

学习在于实用,只有把自己学到的东西真正的融入到我们的开发中,并且使用的得心应手,那才是真正的掌握.而想把技术使用的得心应手并不是一蹴而就的,需要不断的巩固自己的知识体系,需要大量的实战练习,当然还不能缺少你的专研和耐心. 但是很多小伙伴们并不一定学过的知识都掌握了,而且相信很多伙伴们即使学习一种技术也还是停留在读过,看过,学习过,并没有真正的实战过,所以当时学习的技术觉得自己真正的学会了,搞懂了,而且信心满满的觉得自己可以不必在练习了,这是不对的,因为一时的学习并没有立马转变成为你的技能,而是需

Android自定义TabActivity(实现仿新浪微博底部菜单更新UI)

如今Android上很多应用都采用底部菜单控制更新的UI这种框架,例如新浪微博 点击底部菜单的选项可以更新界面.底部菜单可以使用TabHost来实现,不过用过TabHost的人都知道自定义TabHost究竟是有多麻烦的,原生TabHost的风格是不依附屏幕的底部的,要依附底部就要重写布局. TabHost设置的Container可以管理UI的显示,UI可以用LayoutInflater动态生成,也可以是Activity,但不好管理Activity的生命周期.然后用TabHost控制显示UI的显示

仿饿了么等APP底部菜单(Fragment实现)

Fragment实现的底部菜单导航,是现在很多APP都有的功能,效果就是点击菜单之后,菜单实现图标和颜色的变换 实现起来主要有两种方法,一种是Tabhost,一种是Android3.0之后的Fragment Fragment,需要加入v4价包 然后icon图标的话,需求自己做,或者去http://www.iconfont.cn/,阿里的图库下载 底部菜单的图标有两种,一种是默认图标,一种是点击菜单之后的图标 UI: <LinearLayout xmlns:android="http://s