这篇文章主要介绍了 Android 编程实现自定义 Tab 选项卡功能, 结合完整实例形式分析了 Android 自定义 tab 选项卡的遍历、设置及属性操作相关技巧, 需要的朋友可以参考下
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用 "安卓" 或 "安致"。
本文实例讲述了 Android 编程实现自定义 Tab 选项卡功能。分享给大家供大家参考,具体如下:
- import android.app.TabActivity;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.*;
- import android.widget.TabHost.OnTabChangeListener;
- import android.os.Build;
- import android.view.View;
- import java.lang.reflect.Field;
- import android.view.LayoutInflater;
- public class testTabActivity extends TabActivity {
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- int width =45;
- int height =48;
- final TabHost tabs = getTabHost();
- final TabWidget tabWidget = tabs.getTabWidget();
- Field mBottomLeftStrip;
- Field mBottomRightStrip;
- LayoutInflater.from(this).inflate(R.layout.tab_views, tabs.getTabContentView(), true);
- tabs.addTab(tabs.newTabSpec("first tab")
- .setIndicator("信息",getResources().getDrawable(R.drawable.m))
- .setContent(new Intent(testTabActivity.this,OneActivty.class))
- );
- tabs.addTab(tabs.newTabSpec("second tab")
- .setIndicator("收藏",getResources().getDrawable(R.drawable.n))
- .setContent(R.id.content));
- tabs.addTab(tabs.newTabSpec("second tab")
- .setIndicator("设置",getResources().getDrawable(R.drawable.s))
- .setContent(R.id.content));
- 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的接口是怎么样的,现在先加个判断好一些
- */
- if (Float.valueOf(Build.VERSION.RELEASE) <= 2.1) {
- 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.no));
- mBottomRightStrip.set(tabWidget, getResources().getDrawable (R.drawable.no));
- } catch (Exception e) {
- e.printStackTrace();
- }
- } else {
- /**
- * 不做任何处理
- */
- }
- View vvv = tabWidget.getChildAt(i);
- if(tabs.getCurrentTab()==i){
- vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_button));
- }
- else {
- vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar));
- }
- }
- /**
- * 当点击tab选项卡的时候,更改当前的背景
- */
- tabs.setOnTabChangedListener(new OnTabChangeListener(){
- @Override
- public void onTabChanged(String tabId) {
- // TODO Auto-generated method stub
- for (int i =0; i < tabWidget.getChildCount(); i++) {
- View vvv = tabWidget.getChildAt(i);
- if(tabs.getCurrentTab()==i){
- vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.tab_button));
- }
- else {
- vvv.setBackgroundDrawable(getResources().getDrawable(R.drawable.bar));
- }
- }
- }});
- }
- }
希望本文所述对大家 Android 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0323/324024.html