这个需求估计大家都是需要,这几天刚好做了一个项目,也大概的研究了一下,下面将自己的研究成果展现给大家,希望对大家有用!
我就直接贴核心部分的源码了,其他东西大家自己添加,不要懒到只跟我要全部源码,大家自己做一遍才能真正学到东西!
先贴效果给大家看看:
原文来自:http://www.youmi.net/bbs/viewthread.php?tid=102&extra=page%3D1&ordertype=1
- 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));
- }
- }
- }});
- }
- }