`

Android 基本控件 之 TabHost(一)个性你的标签视图

阅读更多

  利用我们前几节文章中讲到的关于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开发资料大全

    android控件的抖动效果 很漂亮的ListView android 图像处理滤镜 照亮边缘特效 无闪烁启动画面 Android实现《天女散花》效果--(带源码) 天天动听 半透明Menu效果 Android 小項目之---Iphone拖动图片特效 (附源码) ...

    Android编程入门很简单.(清华出版.王勇).part1

    本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现云山雾罩、晦涩难懂的讲解,代之以轻松活泼、由浅入深的剖析。这必将使得阅读本书的读者少走弯路,...

    Android编程入门很简单.(清华出版.王勇).part2

    本书是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书。本书避免出现云山雾罩、晦涩难懂的讲解,代之以轻松活泼、由浅入深的剖析。这必将使得阅读本书的读者少走弯路,...

    疯狂Android讲义源码

     1.4 开始第一个Android应用 20  1.4.1 使用Eclipse开发第一个  Android应用 20  1.4.2 通过ADT运行Android应用 23  1.5 Android应用结构分析 24  1.5.1 创建一个Android应用 24  1.5.2 自动生成的R.java 26 ...

    疯狂Android讲义.part2

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    疯狂Android讲义.part1

    第1章 Android应用与开发环境 1 1.1 Android的发展和历史 2 1.1.1 Android的发展和简介 2 1.1.2 Android平台架构及特性 3 1.2 搭建Android开发环境 5 1.2.1 下载和安装Android SDK 5 1.2.2 安装Eclipse和ADT插件 7 ...

    Android开发资料合集-World版!

    4、ANDROID UI 控件 48 4.1、IMAGEBUTTON 48 4.1.1、图案填充问题 48 4.2、TEXTVIEW 49 4.2.1、动态滚动 49 4.3、EDITTEXT 49 4.3.1、光标选择 49 4.4、TITLEBAR 50 4.4.1、非全屏状态下不显示title标题栏 50 4.4.2...

    Android 开发技巧

    0、ANDROID常用类库说明 6 1、ANDROID文件系统与应用程序架构 7 1.1、ANDROID 文件系统 7 1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 ...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    《疯狂Android讲义(第2版)》.(李刚).源代码 疯狂Android讲义目录结构: 第2章、Android应用程序界面设计,即View 2.2、布局管理(Layout):LinearLayout、TableLayout、FrameLayout、RelativeLayout; 2.3、基本...

    Android实例代码

    2.3、基本界面组件:TextView、EditText; Button、ImageButton; 9Patch; RadioButton、CheckBox; ToggleButton;AnalogClock、DigitalClock; ImageView; 2.4、高级界面组件:AutoCompleteTextView; Spinner; ...

Global site tag (gtag.js) - Google Analytics