`

Android学习 之 TabHost(二)个性你的标签

阅读更多

 原文地址,转载请注明,谢谢!http://www.youmi.net/bbs/thread-102-1-4.html

 

1.先看看效果图吧!happy一下!

 




 

 
 

 

2.看核心代码,注释不多,大家不懂的自己查吧!

 

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));
      }
     }
    }});
         
     }
     
     
}

 

  • 大小: 42.7 KB
  • 大小: 12.1 KB
  • 大小: 12.1 KB
分享到:
评论

相关推荐

    android通过tabhost实现标签页

    `TabHost`是Android SDK提供的一种原生组件,用于实现这种多标签页的布局。本篇文章将深入探讨如何利用`TabHost`在Android中创建标签页。 ### 一、TabHost基本概念 `TabHost`是Android中的一个容器类,它允许...

    android--自定义TabHost

    总的来说,自定义TabHost是一个涉及UI设计和交互逻辑的过程,它可以让你的Android应用拥有独特的标签栏设计。通过学习和实践,开发者可以根据项目需求创建出符合品牌形象且功能完善的标签栏,提高用户的使用体验。

    android自定义TabHost

    通过以上步骤,你将能够成功自定义Android的TabHost,包括更换背景颜色。不过,随着Android版本的更新,TabHost的使用逐渐被Fragment和BottomNavigationView等组件取代,但理解如何自定义TabHost仍然是Android开发中...

    android TabHost自定义选项卡

    总结来说,自定义Android的TabHost可以使应用的界面更加个性化,同时通过合理利用Fragment可以优化性能。在实际开发中,还可以根据需求调整选项卡的行为,比如添加滑动效果、动画等。通过掌握这些技巧,你可以在...

    Android TabHost 标签在屏幕左侧样例

    在Android开发中,TabHost是一个常用的组件,用于创建带有多个Tab的...通过理解TabHost的工作原理,以及对XML布局和Java代码的熟练运用,我们可以创造出符合个性化需求的Tab界面,无论是将标签放在屏幕左侧还是右侧。

    android 滑动的tabhost

    在Android应用开发中,TabHost是一个非常重要的组件,它用于创建多标签的界面,使得用户可以在不同的视图间切换。"android 滑动的tabhost"是指将传统的TabHost与手势滑动结合,实现更流畅、更具互动性的用户体验。在...

    自定义Android的TabHost控件样式

    在Android应用开发中,TabHost是一个非常重要的组件,它用于创建多标签的界面,使得用户可以在不同的视图间切换。自定义TabHost的样式能够帮助开发者实现更个性化、更具吸引力的用户界面。本文将深入探讨如何自定义...

    android使用了自定义button自定义tabHost切换页面Demo

    本示例主要讲解如何使用自定义的Button和TabHost来实现页面间的切换,从而创建一个具有个性化标签导航功能的应用。 首先,我们来看看“自定义button”。在Android原生的Button组件基础上进行自定义,主要是为了满足...

    自定义TabHost实现

    在Android开发中,`TabHost`是一个非常重要的组件,它用于创建具有多个“标签”(tabs)的应用界面,每个标签代表一个不同的活动或视图。`TabHost`提供了用户友好的交互方式,允许用户通过点击标签在不同内容之间...

    自定义TabHost经典案例

    总之,自定义TabHost是Android开发中的一个高级技巧,它允许开发者打破常规,创造出更具个性化的选项卡界面。通过调整布局、样式、内容以及交互方式,我们可以为用户提供更加丰富和动态的应用体验。在这个经典案例中...

    自定义Android中TabHost组件显示在屏幕底部 并实现滑动切换

    在Android开发中,TabHost组件通常用于创建带有多个Tab标签的应用界面,每个标签代表一个不同的内容区域。在标准布局中,TabHost通常显示在屏幕顶部,但为了满足特定设计需求,有时我们需要将其调整到屏幕底部并实现...

    Android_TabHost

    在Android开发中,`TabHost`是一个非常重要的组件,它允许开发者在应用程序中创建具有多个选项卡的用户界面。这个组件使得用户可以在不同的视图或功能之间轻松切换,提供了良好的导航体验。`TabHost`结合了`...

    TabHost使用(自定义按钮菜单)

    在Android开发中,`TabHost` 是一个非常重要的组件,用于实现标签页切换的效果,常用于构建多页面的用户界面。本教程将详细介绍如何使用 `TabHost` 创建自定义按钮菜单,以提供丰富的交互体验。 首先,理解 `...

    自定义TabHost 图片在左文字在右

    在Android开发中,`TabHost` 是一个非常重要的...如果你想要更深入地学习`TabHost`以及Android UI设计,可以参考Android官方文档和其他开发者社区的资源,它们提供了大量的实例和技巧,帮助你更好地掌握这一核心组件。

    tabHost底部对齐

    在Android开发中,TabHost是一个非常重要的组件,用于创建具有多个Tab标签的界面,每个标签可以切换到不同的活动或...通过这样的方式,你可以在Android应用中创建一个底部对齐的TabHost,提供更加个性化的用户体验。

    Android应用源码之封装的一个tabhost框架.zip

    本资源"Android应用源码之封装的一个tabhost框架.zip"提供了一个具体的TabHost实现,可以帮助开发者更好地理解和使用这个组件。 TabHost在Android SDK中是作为视图容器来设计的,它允许开发者在一个界面上组织多个...

    封装的一个tabhost框架.zip

    总之,这个"封装的一个tabhost框架.zip"是一个学习Android TabHost功能的实用资源,它可以帮助开发者理解如何创建多标签的用户界面,并提供了一些可能的扩展点,如自定义样式和动态加载。通过研究和实践这个框架,...

    应用源码可以横向拖动的TabHost.zip

    TabHost是Android SDK中用于创建多标签界面的控件,它允许用户在不同的视图间切换,通常与TabWidget结合使用来展示各个标签。在传统的TabHost使用中,标签通常是竖直排列的,但此源码实现了横向拖动的效果,使得用户...

    tabhost+radiogroup

    在Android开发中,`TabHost` 和 `RadioGroup` 是两个重要的组件,它们分别用于创建传统的标签页式界面和实现单选按钮组的功能。在标题"tabhost+radiogroup"中,提到的是一个不使用标准`TabWidget`,而是利用`...

    自定义TabWidget的TabHost

    在Android开发中,TabWidget和TabHost是用于创建具有多个选项卡界面的常用组件。本文将深入探讨如何自定义TabWidget的TabHost,以便为用户提供更丰富的交互体验。首先,让我们了解一下这两个组件的基本概念。 ...

Global site tag (gtag.js) - Google Analytics