`

【原创】android中实现底部tabhost

 
阅读更多
这个主要是实现底部的tabhost方式,tabhost就是有几个标签滑动的一个控件。activity继承TabActivity
其他不多说了,直接上代码
public class main extends TabActivity {
	private TabHost tabHost;
	private TabWidget tabWidget;
	Field mBottomLeftStrip;
	Field mBottomRightStrip;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		makeTab();
	}

	public void makeTab() {
		if (this.tabHost == null) {
			tabHost = getTabHost();
			tabWidget = getTabWidget();
			tabHost.setup();
			tabHost.bringToFront();

			TabSpec firsttab = tabHost.newTabSpec("firsttab");
			TabSpec sencondtab = tabHost.newTabSpec("sencondtab");
			TabSpec thirdtab = tabHost.newTabSpec("thirdtab");

			firsttab.setIndicator("first",
					getResources().getDrawable(R.drawable.first)).setContent(
					new Intent(this, first.class));
			sencondtab.setIndicator("second",
					getResources().getDrawable(R.drawable.second)).setContent(
					new Intent(this, second.class));
			thirdtab.setIndicator("third",
					getResources().getDrawable(R.drawable.third)).setContent(
					new Intent(this, third.class));

			tabHost.addTab(firsttab);
			tabHost.addTab(sencondtab);
			tabHost.addTab(thirdtab);

			if (Integer.valueOf(Build.VERSION.SDK) <= 7) {
				try {
					mBottomLeftStrip = tabWidget.getClass().getDeclaredField(
							"mBottomLeftStrip");
					mBottomRightStrip = tabWidget.getClass().getDeclaredField(
							"mBottomRightStrip");
					if (!mBottomLeftStrip.isAccessible()) {
						mBottomLeftStrip.setAccessible(true);
					}
					if (!mBottomRightStrip.isAccessible()) {
						mBottomRightStrip.setAccessible(true);
					}
					mBottomLeftStrip.set(tabWidget,
							getResources().getDrawable(R.drawable.linee));
					mBottomRightStrip.set(tabWidget, getResources()
							.getDrawable(R.drawable.linee));

				} catch (Exception e) {
					e.printStackTrace();
				}
			} else {
				try {
					mBottomLeftStrip = tabWidget.getClass().getDeclaredField(
							"mLeftStrip");
					mBottomRightStrip = tabWidget.getClass().getDeclaredField(
							"mRightStrip");
					if (!mBottomLeftStrip.isAccessible()) {
						mBottomLeftStrip.setAccessible(true);
					}
					if (!mBottomRightStrip.isAccessible()) {
						mBottomRightStrip.setAccessible(true);
					}
					mBottomLeftStrip.set(tabWidget,
							getResources().getDrawable(R.drawable.linee));
					mBottomRightStrip.set(tabWidget, getResources()
							.getDrawable(R.drawable.linee));
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

			for (int i = 0; i < tabWidget.getChildCount(); i++) {

				View view = tabWidget.getChildAt(i);
				if (tabHost.getCurrentTab() == i) {
					view.setBackgroundDrawable(getResources().getDrawable(
							R.drawable.focus));
				} else {
					view.setBackgroundDrawable(getResources().getDrawable(
							R.drawable.unfocus));
				}
			}

			tabHost.setOnTabChangedListener(new OnTabChangeListener() {

				@Override
				public void onTabChanged(String tabId) {
					for (int i = 0; i < tabWidget.getChildCount(); i++) {
						View view = tabWidget.getChildAt(i);
						Toast.makeText(main.this, tabId, Toast.LENGTH_SHORT).show();
						if (tabHost.getCurrentTab() == i) {
							view.setBackgroundDrawable(getResources()
									.getDrawable(R.drawable.focus));
						} else {
							view.setBackgroundDrawable(getResources()
									.getDrawable(R.drawable.unfocus));
						}
					}
				}
			});
		}
	}
}


这个是主类
再看看主布局文件:
<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@android:id/tabhost"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent">
   
   <LinearLayout 
  	  android:orientation="vertical"
  	  android:layout_width="fill_parent"
   	  android:layout_height="fill_parent">
      <FrameLayout
         android:id="@android:id/tabcontent"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_weight="1">
      </FrameLayout>
      <TabWidget
         android:id="@android:id/tabs"
         android:layout_width="fill_parent"
         android:layout_alignParentBottom="true"
         android:layout_height="wrap_content"/>  
	</LinearLayout>
</TabHost>

这样,基本上一个可用的tabhost就可以了。
附件是代码
分享到:
评论

相关推荐

    android Tabhost 实现底部菜单效果

    在Android开发中,TabHost是实现底部导航菜单的一种传统方式,它允许用户在多个标签页之间切换,每个标签页通常代表一个不同的功能区域。本文将详细介绍如何使用TabHost来创建带有图片和文字,并且在选中时有明显...

    android中fragment实现tabhost标签切换效果

    要实现"android中fragment实现tabhost标签切换效果",首先需要创建多个Fragment类,每个类代表一个Tab下的内容。这些Fragment类应该继承自`androidx.fragment.app.Fragment`(如果支持AndroidX库)或`android.app....

    使用TabHost实现底部菜单栏

    下面将详细介绍如何使用`TabHost`来实现底部菜单栏。 ### 1. `TabHost`概述 `TabHost`是Android中的一个容器,它可以容纳多个`TabWidget`(选项卡)和一个`FrameLayout`(内容区域)。`TabWidget`显示选项卡,`...

    android TabHost 底部显示

    在Android开发中,TabHost是实现底部导航栏(Tab Bar)的一种传统方式,它允许用户在不同的内容区域之间切换,通常用于多视图的应用设计。本文将深入探讨如何使用TabHost来实现在Android应用底部显示选项卡的功能。 ...

    Fragment实现底部tabhost的效果

    本教程将详细讲解如何利用Fragment技术实现底部TabHost的效果,同时涉及自定义控件和通过代码动态加载布局的方法。 首先,我们需要理解Fragment的基本概念。Fragment是Android中的一个组件,它代表应用程序界面的一...

    底部tabhost嵌套顶不tabhost.

    在Android应用开发中,TabHost是一个非常常见的组件,用于实现多标签页面的切换。本话题主要探讨如何在应用中实现“底部TabHost嵌套顶部TabHost”的设计,以及顶部TabHost如何与ListView协同工作,创建类似网易新闻...

    android 底部菜单栏 TabHost

    总之,`TabHost`是Android早期用于实现底部菜单栏的一种方式,尽管已不再是首选方案,但在某些场景下仍然有其价值。理解`TabHost`的工作原理和使用方法,可以帮助开发者更好地理解和处理老项目,或者在特定需求下...

    android 利用radiobutton实现tabhost效果

    RadioButton是Android中的单选按钮,属于Compound Button的一种,它允许用户在多个选项中选择一个。在一个RadioGroup中,用户只能选择一个RadioButton,这与TabHost让用户在多个标签之间切换的概念相吻合。 要实现...

    底部TabHost实现多个Activity切换

    3. 自定义TabHost样式:为了实现底部的TabHost,我们可以使用自定义的BottomNavigationView替换默认的TabWidget。BottomNavigationView是Android Material Design组件库中的一个控件,可以方便地创建底部导航栏。在...

    tabhost实现Android底部导航

    在Android开发中,...同时,随着Android版本的更新,谷歌推出了新的底部导航实现方式,如BottomNavigationView,虽然TabHost在现代Android开发中使用较少,但在一些旧项目或简单应用中,它仍然是一个实用的选择。

    Android fragment 内部嵌套tabhost组件

    以上就是关于"Android fragment 内部嵌套tabhost组件"的相关知识点,实际开发中还需要根据具体需求进行调整和优化,以实现最佳的用户体验。在给定的HarlanFragment示例中,可以进一步学习如何将这些概念应用于实践。

    TabHost的使用方法

    在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签可以展示不同的内容或活动(Activity)。本教程将详细介绍如何使用TabHost,特别适合初学者和教学场景,例如构建一个模拟...

    Android 嵌套TabHost示例

    本示例是关于如何在Android中实现嵌套的TabHost,即两个层级的TabHost,类似于网页中的二级菜单栏,这种设计可以提供更丰富的用户交互体验。 首先,我们要理解TabHost的基本概念。TabHost是一个容器,它可以包含一...

    android--自定义TabHost

    在Android开发中,TabHost是一个非常重要的组件,它允许开发者创建多标签的界面,每个标签可以关联一个不同的Activity或者Fragment。然而,系统默认的TabHost功能有限,样式和交互方式可能无法满足所有项目的需求,...

    实例讲解Android应用开发中TabHost的使用要点

    在Android应用开发中,TabHost是一个非常重要的组件,用于创建具有多个标签(Tab)的用户界面,每个标签可以展示不同的内容或功能。TabHost通常与TabWidget结合使用,为用户提供一种便捷的方式来切换不同的视图。...

    自定义Android中TabHost组件显示在屏幕底部,并实现滑动切换页面(源码下载)

    通过以上步骤,你可以成功地自定义Android中的TabHost组件,使其显示在屏幕底部并实现滑动切换页面的功能。这将极大地提升应用的用户交互体验,使得用户可以方便地在不同的功能之间切换。记得下载提供的TestTabHost2...

    Android之底部導航欄--RadioGroup、TabHost、TabActivity

    `RadioButton`是Android中的一个视图组件,通常与RadioGroup一起使用,用于创建单选选项。每个RadioButton代表底部导航栏中的一个标签,用户点击后会高亮显示,表示当前选中的页面或功能。 3. **TabHost**: ...

    TabHost实现底部菜单

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

    android 可以滑动的tabhost

    在Android开发中,"可滑动的TabHost"是一种常见的用户界面组件,它结合了TabHost和ViewPager的优点,提供了一种动态、可滑动的方式来切换不同的内容片段。TabHost是Android原生的一个组件,用于创建带有多个选项卡的...

    仿新浪微博底部TabHost简单实现

    在Android应用开发中,TabHost是一个非常常见的组件,它用于创建多标签的界面,使得用户可以在不同的功能之间轻松切换。本教程将详细讲解如何使用TabHost来实现类似新浪微博底部导航栏的效果。 首先,我们需要理解...

Global site tag (gtag.js) - Google Analytics