利用我们前几节文章中讲到的关于Java的反射机制(http://emmet1988.iteye.com/admin/blogs/1064621)来实现对系统控件TabHost的“定制”功能。
1.当我们继承自一个TabActivity之后,就可以通过getTabHost()方法得到一个TabHost对象,接着再通过该对象得到TabWidget对象。
final TabHost tabs = getTabHost();
final TabWidget tabWidget = tabs.getTabWidget();
2.接下来改写tabWidget中的各个标签对象的属性值,进而实现“定制”的功能,这里用到的就是Java的反射机制。
for (int i = 0; i < tabWidget.getChildCount(); i++) {
/**
* 设置高度、宽度,不过宽度由于设置为fill_parent,在此对它没效果
*/
tabWidget.getChildAt(i).getLayoutParams().height = height;
tabWidget.getChildAt(i).getLayoutParams().width = width;
/**
* 设置tab中标题文字的颜色,不然默认为黑色
*/
final TextView tv = (TextView) tabWidget.getChildAt(i)
.findViewById(android.R.id.title);
tv.setTextColor(this.getResources().getColorStateList(
android.R.color.white));
/**
* 此方法是为了去掉系统默认的色白的底角
*
* 在 TabWidget中mBottomLeftStrip、mBottomRightStrip
* 都是私有变量,但是我们可以通过反射来获取
*
* 由于还不知道Android 2.2的接口,在这里先加个判断,避免报错
*/
Log.d("debug", "version is "+Build.VERSION.RELEASE);
// 版本信息有的较长,比如2.2.3,2.1.3.1,我们只需要取前面的三位即可。
final String VERSION = Build.VERSION.RELEASE.substring(0, 3);
Log.d("debug", "version is "+VERSION);
if (Float.valueOf(VERSION) <= 2.1) {
try {
Class<TabWidget> tabWidgetClass = (Class<TabWidget>) tabWidget.getClass();
mBottomLeftStrip = tabWidgetClass.getDeclaredField("mBottomLeftStrip");
mBottomRightStrip = tabWidgetClass.getDeclaredField("mBottomRightStrip");
// 判断是否有访问权限的控制
if (!mBottomLeftStrip.isAccessible()) {
// 取消访问权限控制
mBottomLeftStrip.setAccessible(true);
}
if (!mBottomRightStrip.isAccessible()) {
mBottomRightStrip.setAccessible(true);
}
// 设置属性值
mBottomLeftStrip.set(tabWidget,
getResources().getDrawable(R.drawable.alpha_00));
mBottomRightStrip.set(tabWidget, getResources()
.getDrawable(R.drawable.alpha_00));
} catch (Exception e) {
e.printStackTrace();
}
} else {
/**
* 不做任何处理
*/
}
View vvv = tabWidget.getChildAt(i);
if (tabs.getCurrentTab() == i) {
vvv.setBackgroundDrawable(getResources().getDrawable(
R.drawable.tab_enabled));
} else {
vvv.setBackgroundDrawable(getResources().getDrawable(
R.drawable.tab_selected));
}
}
分享到:
相关推荐
### Android 控件之TabHost Tab页 #### 一、TabHost 概述 TabHost 是 Android 中用于实现标签页面切换的一个重要控件。通过 TabHost 可以方便地为应用程序添加多个标签页面,并且能够轻松地进行页面间的切换。...
在Android开发中,TabHost控件是一个非常重要的组件,它被用来实现标签页式界面,让用户可以在多个视图之间切换,提升应用的交互体验。TabHost通常与TabWidget和FrameLayout一起使用,创建一个带有可点击标签的界面...
在Android开发中,`TabHost`是一个非常重要的组件,它被用来实现标签栏导航功能,让用户可以在多个界面之间轻松切换。本篇文章将详细介绍`TabHost`的使用方法,并通过示例代码来帮助你理解其工作原理。 ### 1. ...
本资源"Android应用源码之封装的一个tabhost框架"提供了一个预封装好的TabHost实现,方便开发者快速构建类似布局的应用。 TabHost是Android SDK中的一个类,它允许开发者在一个界面上组织多个小部件(如活动或视图...
在Android开发中,Tab布局和TabHost是创建多页面、多视图应用界面的重要组件,它们可以帮助用户在不同的功能之间轻松切换。本文将详细介绍Tab和TabHost的使用方法,并通过一个实际的源码实例来加深理解。 首先,Tab...
在Android应用开发中,TabHost是一个非常重要的组件,它用于创建多标签的界面,使得用户可以在不同的视图间切换。自定义TabHost的样式能够帮助开发者实现更个性化、更具吸引力的用户界面。本文将深入探讨如何自定义...
在Android开发中,TabHost是一个非常重要的控件,它用于创建多标签的界面,使得用户可以在不同的视图间切换,提供了类似网页浏览器的选项卡功能。TabHost与TabWidget、FrameLayout协同工作,来实现各个标签页的内容...
`Gallery`是一个可以水平滚动的视图容器,而`TabHost`则是Android系统提供的用于构建带有多个标签页的应用界面的组件。下面将详细讲解这个实现过程。 首先,`TabHost`是Android中处理多标签页的主要组件,它可以...
`TabHost`是Android SDK中的一个类,它允许你在应用中创建一个多标签的界面。每个标签都可以对应一个独立的布局或Activity,从而让用户能够在一个界面上轻松切换不同功能。实现`TabHost`通常包括以下几个步骤: - ...
TabHost 是用于创建带有标签页界面的组件,可以组合多个小部件(如 FrameLayout)到一个视图中,并通过标签在它们之间切换。这对于组织复杂界面和多面板交互非常有用。 3. **Android 控件之 Spinner** Spinner ...
首先,ViewPager是Android SDK提供的一种用于展示多个Fragment或者View的视图切换控件。它的主要优点是可以通过手势左右滑动来切换页面,提供了流畅的用户体验。在实际应用中,ViewPager通常与PagerAdapter一起使用...
其中,`TabHost`是Android提供的一种实现多标签视图的方式,它可以帮助开发者创建出带有标签页的用户界面。本文将详细介绍`TabHost`的基本概念、使用方法及其相关API,帮助读者掌握如何在应用中添加和管理多个标签页...
总的来说,Android的TabHost和TabWidget提供了一种方便的方式,让用户能够在一个屏幕上轻松地在多个视图之间切换,增加了应用程序的交互性和用户体验。然而,随着Android版本的发展,TabHost的使用逐渐被Fragment和...
在Android开发中,`TabHost`是一个非常重要的组件,它允许开发者创建带有多个选项卡的用户界面,每个选项卡对应不同的内容区域。然而,随着Android版本的更新,传统的`TabHost`已经逐渐被新的实现方式所取代。在这个...
在Android开发中,`TabHost`控件是一个非常重要的组件,它主要用于实现界面中的标签切换效果,常用于创建多页面的导航布局。本DEMO通过实际操作,详细讲解了如何利用`TabHost`来构建一个具有底部选项卡的界面。我们...
`Gallery`是Android提供的一个可以水平滚动视图的控件,而`TabHost`则是用于构建多标签页面布局的容器。下面我们将详细讨论这两个组件以及如何将它们结合在一起创建一个动态的标签效果图。 首先,`Gallery`控件允许...
在Android开发中,`TabHost`是一个非常重要的组件,它允许开发者在应用界面中创建一个具有标签页(tabs)的布局。`TabHost`通常用于实现多视图切换,每个标签对应一个不同的活动(Activity)或者布局。在这个...
`TabHost`作为容器,管理着`TabWidget`和一个`FrameLayout`,而`TabWidget`则是展示选项卡的控件。 1. **TabHost的使用** - `TabHost`是`FrameLayout`的特殊形式,它包含两个子元素:`TabWidget`和`FrameLayout`。...
在Android应用开发中,TabHost通常用于创建一个包含多个Tab的界面,每个Tab代表一个不同的活动或者视图。然而,为了提升用户体验,开发者们经常希望在Tab上显示未读消息的小红点,或者加上数字来表示未处理的任务...
在Android开发中,TableHost控件可能并非标准的Android SDK内置控件,但根据标题和描述,我们可以推测这里提到的TableHost可能是开发者自定义或者是一个特定库提供的组件,用于实现类似表格布局或视图切换的功能。...