实现、设置Android TabWidgetby小雨

摘要:
检查了很多材料后,我发现它们仍然不完整。我最好自己整理一下,至少要确保我的做法是正确的,以免误导读者,同时也给自己做个记录!包装商hualang。选项卡;importandroid.app。活动importandroid.app。选项卡活动;importandroid.graphics。颜色importandroid.os。捆importandroid.widget。TabHost;importandroid.widget。干杯importandroid.widget.TabHost。OnTabChangeListener;PublicclassTabTestextendsTabActivity{/**在首次创建活动时调用。*/TabHosttabhost;@OverridepublicvotionCreate{super.onCreate;setContentView;//获取TabHost对象TabHost=getTabHost() ;// 向tabhost添加标签//创建新的TabSpec//设置其标签和标签映射//设置内容TabHost。addTab;tabhost。addTab;tabhost。addTab;//设置TabHost//TabHost的背景色。setBackgroundColor//设置TabHost TabHost的背景图像资源。setBackgroundResource//设置之前,标记tabhost。显示setCurrentTab//标签切换事件处理setOnTabChangedListenertabhost。setOnTabChangedListener;}}main.xml˂?

查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法正确的,以免误导读者,也是给自己做个记录吧!

    

首先先看一个小例子,接着讲授理原

    

 

    

  1. TabTest.java   
  2.   
  3. view plaincopy to clipboardprint?   
  4. package org.hualang.tab;     
  5. import android.app.Activity;     
  6. import android.app.TabActivity;     
  7. import android.graphics.Color;     
  8. import android.os.Bundle;     
  9. import android.widget.TabHost;     
  10. import android.widget.Toast;     
  11. import android.widget.TabHost.OnTabChangeListener;     
  12. public class TabTest extends TabActivity {     
  13.     /** Called when the activity is first created. */     
  14.     TabHost tabhost;     
  15.     @Override     
  16.     public void onCreate(Bundle savedInstanceState) {     
  17.         super.onCreate(savedInstanceState);     
  18.         setContentView(R.layout.main);     
  19.         //获得TabHost对象     
  20.         tabhost = getTabHost();     
  21.         //为TabHost添加签标     
  22.         //新建一个newTabSpec(newTabSpec)     
  23.         //设置其签标和标图(setIndicator)     
  24.         //设置容内(setContent)     
  25.         tabhost.addTab(tabhost.newTabSpec("tab1")     
  26.                 .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1))     
  27.                 .setContent(R.id.text1));     
  28.         tabhost.addTab(tabhost.newTabSpec("tab2")     
  29.                 .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2))     
  30.                 .setContent(R.id.text2));     
  31.         tabhost.addTab(tabhost.newTabSpec("tab3")     
  32.                 .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3))     
  33.                 .setContent(R.id.text3));     
  34.         //设置TabHost的背景颜色     
  35.         //tabhost.setBackgroundColor(Color.argb(150,22,70,150));     
  36.         //设置TabHost的背景图片资源     
  37.         tabhost.setBackgroundResource(R.drawable.bg0);     
  38.         //设置前当示显哪个签标     
  39.         tabhost.setCurrentTab(0);     
  40.         //签标换切事件处理,setOnTabChangedListener     
  41.         tabhost.setOnTabChangedListener(new OnTabChangeListener()     
  42.         {     
  43.             public void onTabChanged(String tabId)     
  44.             {     
  45.                 Toast toast=Toast.makeText(getApplicationContext(), "现在是"+tabId+"签标", Toast.LENGTH_SHORT);     
  46.                 toast.show();     
  47.             }     
  48.         });     
  49.              
  50.     }     
  51. }     
  52.   

    main.xml

    

  1. <?xml version="1.0" encoding="utf-8"?>     
  2. <TabHost xmlns:android="http://schemas.android.com/apk/res/android"     
  3.     android:id="@android:id/tabhost"     
  4.     android:layout_width="fill_parent"     
  5.     android:layout_height="fill_parent">     
  6.     <LinearLayout     
  7.         android:orientation="vertical"     
  8.         android:layout_width="fill_parent"     
  9.         android:layout_height="fill_parent">     
  10.         <TabWidget     
  11.             android:id="@android:id/tabs"     
  12.             android:layout_width="fill_parent"     
  13.             android:layout_height="wrap_content" />     
  14.         <FrameLayout     
  15.             android:id="@android:id/tabcontent"     
  16.             android:layout_width="fill_parent"     
  17.             android:layout_height="fill_parent">     
  18.             <TextView      
  19.                 android:id="@+id/text1"     
  20.                 android:layout_width="fill_parent"     
  21.                 android:layout_height="fill_parent"      
  22.                 android:text="选项卡1" />     
  23.             <TextView      
  24.                 android:id="@+id/text2"     
  25.                 android:layout_width="fill_parent"     
  26.                 android:layout_height="fill_parent"      
  27.                 android:text="选项卡2" />     
  28.             <TextView      
  29.                 android:id="@+id/text3"     
  30.                 android:layout_width="fill_parent"     
  31.                 android:layout_height="fill_parent"      
  32.                 android:text="选项卡3" />     
  33.         </FrameLayout>     
  34.     </LinearLayout>     
  35. </TabHost>    

    


    

Android TabWidget的实现可以分为二种,一种是应用准标TabActivity实现,另外一种可以自定义方法实现,种这方法实现起来对相较比复杂,但对于要实现较比多元化的view是很好的,这里我们简略看下源码

    

一、通用做法

    

继承TabActivity,实现自己的TabActivity

    

 

    

[java] view plaincopy
 
  1. import android.app.Activity;  
  2. import android.app.TabActivity;  
  3. import android.content.Intent;  
  4. import android.os.Bundle;  
  5. import android.widget.TabHost;  
  6. import android.widget.TabHost.OnTabChangeListener;  
  7. public class TabWidgetDemo2 extends TabActivity implements OnTabChangeListener {  
  8.      private TabHost mTabHost;  
  9.        
  10.     @Override  
  11.     protected void onCreate(Bundle savedInstanceState) {  
  12.         // TODO Auto-generated method stub  
  13.         super.onCreate(savedInstanceState);  
  14.           
  15.         setContentView(R.layout.tabwidgetdemo2);    
  16.         mTabHost = getTabHost();  
  17.         mTabHost.setOnTabChangedListener(this);  
  18.         setupTab1();  
  19.         setupTab2();  
  20.         mTabHost.setCurrentTab(1);  
  21.     }  
  22.     private void setupTab2() {  
  23.         // TODO Auto-generated method stub  
  24.         Intent intent = new Intent();  
  25.         intent.setAction(Intent.ACTION_MAIN);  
  26.         intent.setClass(this, TabWidget2.class);  
  27.         mTabHost.addTab(mTabHost.newTabSpec("TabWidget2")  
  28.                 .setIndicator("TabWidget2",getResources().getDrawable(R.drawable.icon))  
  29.                 .setContent(intent));  
  30.     }  
  31.     private void setupTab1() {  
  32.         // TODO Auto-generated method stub  
  33.         Intent intent = new Intent();  
  34.         intent.setAction(Intent.ACTION_MAIN);  
  35.         intent.setClass(this, TabWidget1.class);  
  36.         mTabHost.addTab(mTabHost.newTabSpec("TabWidget1")  
  37.                 .setIndicator("TabWidget1",getResources().getDrawable(R.drawable.icon))  
  38.                 .setContent(intent));  
  39.     }  
  40.     public void onTabChanged(String tabId) {  
  41.         // TODO Auto-generated method stub  
  42.         Activity activity = getLocalActivityManager().getActivity(tabId);  
  43.         if (activity != null) {  
  44.             activity.onWindowFocusChanged(true);  
  45.         }  
  46.     }  
  47.        
  48.        
  49. }  

    

二个tab对应的Activity,先看TabWidget1,这个类在第二种实现中还会用到,因此我们可以看到对Action的判断。

    

 

    

[java] view plaincopy
 
  1. import android.app.Activity;  
  2. import android.content.Intent;  
  3. import android.os.Bundle;  
  4. import com.android.exampledemo.R;  
  5. import com.android.exampledemo.util.DemoUtils;  
  6. public class TabWidget1 extends Activity {  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         // TODO Auto-generated method stub  
  10.         super.onCreate(savedInstanceState);  
  11.           
  12.         Intent intent = this.getIntent();  
  13.         if (intent.getAction().equals(Intent.ACTION_MAIN)){  
  14.             setContentView(R.layout.tabwidgetdemo2_1);  
  15.         }  
  16.         else {  
  17.             setContentView(R.layout.tabwidget_1);  
  18.             DemoUtils.updateButtonBar((Activity)this,R.id.contactstab);  
  19.         }  
  20.     }  
  21. }  

    

 

    

再看一下TabWidget2,这个Activity我们在第二种实现方法中也会用到。

    

 

    

[java] view plaincopy
 
  1. import com.android.exampledemo.R;  
  2. import com.android.exampledemo.util.DemoUtils;  
  3. import android.app.Activity;  
  4. import android.content.Intent;  
  5. import android.os.Bundle;  
  6. public class TabWidget2 extends Activity {  
  7.     @Override  
  8.     protected void onCreate(Bundle savedInstanceState) {  
  9.         // TODO Auto-generated method stub  
  10.         super.onCreate(savedInstanceState);  
  11.           
  12.         Intent intent = this.getIntent();  
  13.           
  14.         if (intent.getAction().equals(Intent.ACTION_MAIN)){  
  15.             setContentView(R.layout.tabwidgetdemo2_1);  
  16.         }  
  17.         else {  
  18.             setContentView(R.layout.tabwidget_2);  
  19.             DemoUtils.updateButtonBar((Activity)this,R.id.groupstab);  
  20.         }  
  21.     }  
  22. }  

    

 

    

最后就是各个Activity对应的layout

    

1.tabwidgetdemo2.xml

    

 

    

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <TabHost  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:id="@android:id/tabhost"  
  5.   android:layout_width="fill_parent"  
  6.   android:layout_height="fill_parent">  
  7.   <LinearLayout   
  8.     android:orientation="vertical"  
  9.     android:layout_width="fill_parent"  
  10.     android:layout_height="fill_parent">  
  11.     <TabWidget android:id="@android:id/tabs"  
  12.         android:layout_width="fill_parent"  
  13.         android:layout_height="68dip"  
  14.         android:paddingLeft="1dip"  
  15.         android:paddingRight="1dip"  
  16.         android:paddingTop="4dip"  
  17.         />  
  18.     <FrameLayout android:id="@android:id/tabcontent"  
  19.         android:layout_width="fill_parent"  
  20.         android:layout_height="0dip"  
  21.         android:layout_weight="1"  
  22.         />  
  23.     </LinearLayout>   
  24. </TabHost>  

    

2.二个sub tab对应的layout

    

 

    

[xhtml] view plaincopy
 
  1. Layout1  
  2. <?xml version="1.0" encoding="utf-8"?>  
  3. <LinearLayout  
  4.   xmlns:android="http://schemas.android.com/apk/res/android"  
  5.   android:layout_width="fill_parent"  
  6.   android:layout_height="fill_parent"  
  7.   android:background="#FFF">  
  8.   <TextView android:id="@+id/textview"   
  9.     android:layout_width="wrap_content"   
  10.     android:layout_height="wrap_content"  
  11.     android:text="Tab Widget first">  
  12.    </TextView>  
  13. </LinearLayout>  
  14. Layout2  
  15. <?xml version="1.0" encoding="utf-8"?>  
  16. <LinearLayout  
  17.   xmlns:android="http://schemas.android.com/apk/res/android"  
  18.   android:layout_width="fill_parent"  
  19.   android:layout_height="fill_parent"  
  20.   android:background="#FFF">  
  21.   <TextView android:id="@+id/textview"   
  22.     android:layout_width="wrap_content"   
  23.     android:layout_height="wrap_content"  
  24.     android:text="Tab Widget second">  
  25.    </TextView>  
  26. </LinearLayout>  

    

 

    

 

    

方法2:

    

先创立一个Activity (TabWidgetDemo)

    

 

    

[c-sharp] view plaincopy
 
  1. 1.TabWidgetDemo.java  
  2. import com.android.exampledemo.R;  
  3. import com.android.exampledemo.util.DemoUtils;  
  4. import android.app.Activity;  
  5. import android.content.Context;  
  6. import android.content.SharedPreferences;  
  7. import android.os.Bundle;  
  8. //not use tabhost to organized   
  9. public class TabWidgetDemo extends Activity {  
  10.     @Override  
  11.     protected void onCreate(Bundle savedInstanceState) {  
  12.         // TODO Auto-generated method stub  
  13.         super.onCreate(savedInstanceState);  
  14.         //int activeTab = DemoUtils.getIntPref(this, "activetab", R.id.artisttab);  
  15.         SharedPreferences prefs =  
  16.             getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);  
  17.         int activeTab = prefs.getInt("activetab", R.id.contactstab);  
  18.         if (activeTab != R.id.contactstab  
  19.                 && activeTab != R.id.groupstab) {  
  20.             activeTab = R.id.contactstab;  
  21.         }  
  22.         DemoUtils.activateTab(this, activeTab);  
  23.     }  
  24. }  
  25. 2.DemoUtils  
  26. import android.app.Activity;  
  27. import android.content.Intent;  
  28. import android.net.Uri;  
  29. import android.view.View;  
  30. import android.widget.TabWidget;  
  31. import com.android.exampledemo.R;  
  32. public class DemoUtils {  
  33.     static int sActiveTabIndex = -1;  
  34.       
  35.     public static void activateTab(Activity a,int active_id){  
  36.         Intent intent = new Intent(Intent.ACTION_PICK);  
  37.         switch (active_id) {  
  38.         case R.id.contactstab:  
  39.             intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_contacts");  
  40.             break;  
  41.         case R.id.groupstab:  
  42.             intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_groups");  
  43.             break;  
  44.         default:  
  45.             return;  
  46.         }  
  47.         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  48.         a.startActivity(intent);  
  49.         a.finish();  
  50.         a.overridePendingTransition(0,0);  
  51.     }  
  52.       
  53.       
  54.     public static void updateButtonBar(Activity a, int highlight) {  
  55.         final TabWidget ll = (TabWidget) a.findViewById(R.id.buttonbar);  
  56.           
  57.          for (int i = ll.getChildCount() - 1; i >= 0; i--) {  
  58.              View v = ll.getChildAt(i);  
  59.              boolean isActive = (v.getId() == highlight);  
  60.              if (isActive) {  
  61.                     ll.setCurrentTab(i);  
  62.                     sActiveTabIndex = i;  
  63.              }  
  64.                
  65.              v.setTag(i);  
  66.              v.setOnClickListener(new View.OnClickListener() {  
  67.                     public void onClick(View v) {  
  68.                         int id = v.getId();  
  69.                         if (id == ll.getChildAt(sActiveTabIndex).getId()) {  
  70.                             return;  
  71.                         }  
  72.                         activateTab((Activity)ll.getContext(),id );  
  73.                         ll.setCurrentTab((Integer) v.getTag());  
  74.                     }});  
  75.          }  
  76.     }  
  77. }  

     

    

 

    

二个Tab sub activity前一方法中经已给出,这里我们只需要看一下layout的实现就能够了

    

1>buttonbar.xml

    

 

    

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <TabWidget xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/buttonbar"  
  4.     android:layout_width="match_parent"  
  5.     android:layout_height="wrap_content" >  
  6.     <TextView  
  7.         android:id="@+id/contactstab"  
  8.         android:focusable="true"  
  9.         android:drawableTop="@drawable/icon"  
  10.         android:background="@drawable/buttonbarbackground"  
  11.         android:text="Contacts"  
  12.         android:textColor="@color/tab_indicator_text"  
  13.         android:textAppearance="?android:attr/textAppearanceSmall"  
  14.         android:paddingTop="7dip"  
  15.         android:paddingBottom="2dip"  
  16.         android:gravity="center"  
  17.         android:layout_weight="1"  
  18.         android:layout_marginLeft="-3dip"  
  19.         android:layout_marginRight="-3dip"  
  20.         android:layout_width="match_parent"  
  21.         android:layout_height="84dip"  
  22.         android:singleLine="true"  
  23.         android:ellipsize="marquee" />  
  24.     <TextView  
  25.         android:id="@+id/groupstab"  
  26.         android:focusable="true"  
  27.         android:drawableTop="@drawable/icon"  
  28.         android:background="@drawable/buttonbarbackground"  
  29.         android:text="Group"  
  30.         android:textColor="@color/tab_indicator_text"  
  31.         android:textAppearance="?android:attr/textAppearanceSmall"  
  32.         android:paddingTop="7dip"  
  33.         android:paddingBottom="2dip"  
  34.         android:gravity="center"  
  35.         android:layout_weight="1"  
  36.         android:layout_marginLeft="-3dip"  
  37.         android:layout_marginRight="-3dip"  
  38.         android:layout_width="match_parent"  
  39.         android:layout_height="84dip"  
  40.         android:singleLine="true"  
  41.         android:ellipsize="marquee" />  
  42. </TabWidget>  

    

2>tabwidget_1.xml

    

 

    

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="fill_parent"  
  5.   android:layout_height="fill_parent">  
  6.     
  7.   <include layout="@layout/battonbar" />  
  8.     
  9.   <ExpandableListView android:id="@+id/android:list"  
  10.                   android:layout_width="fill_parent"   
  11.                   android:layout_height="wrap_content"  
  12.                   android:footerDividersEnabled="true"  
  13.                   android:fadeScrollbars="true"  
  14.                   android:drawSelectorOnTop="true">  
  15.   </ExpandableListView>  
  16.     
  17. </LinearLayout>  

    

3> tabwidget_2.xml

    

 

    

[xhtml] view plaincopy
 
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.   xmlns:android="http://schemas.android.com/apk/res/android"  
  4.   android:layout_width="fill_parent"  
  5.   android:layout_height="fill_parent">  
  6.     
  7.   <include layout="@layout/battonbar" />  
  8.     
  9. </LinearLayout>  

    

 

文章结束给大家分享下程序员的一些笑话语录: 真正的程序员喜欢兼卖爆米花,他们利用CPU散发出的热量做爆米花,可以根据米花爆裂的速度听出正在运行什么程序。

免责声明:文章转载自《实现、设置Android TabWidgetby小雨》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Eclipse背景颜色修改在群晖上安装docker和docker-nginx下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Activity简介

Activities简介         Activity类是android应用程序中的一个重要组件,activity对象组织和启动的方式更是android平台应用程序模型的基础。与范式编程使用main()函数启动应用不同,android系统在Activity实列中通过调用符合当前Activity生命周期的回调方法来执行代码。       本文档介绍act...

Activity的生命周期详讲及其的生命周期监视,应用程序启动过程,

1:应用程序的启动过程 应用程序的图标被点击-》启动activitythread-》线程的入口main函数-》创建activitythread-》绑定activitythread thread.attach(false,startSeq)-》创建仪表类生命周期,管理程序的生命进程mInstrumentation = new Instrumentation(...

浅析Android动画(二),属性动画高级实例探究

转载请注明出处!http://www.cnblogs.com/wondertwo/p/5312482.html ObjectAnimator实现属性动画 为了写好Android动画这几篇博客,在动笔之前我是下过很大决心的,我对自己的要求是尽量把一个小知识点写清楚写明白,说白了就是相对于大而全的长篇大论,我更倾向于去写小而美的博客!为了保证在高产的同时能坚...

Android开发之查看应用包名package和入口activity名称的方法

使用android自动化测试工具monkeyrunner启动应用时,需要填写被测程序的包名和启动的Activity,以下有两种查看应用包名package和入口activity名称的方法:方法一:使用aapt //aapt是sdk自带的一个工具,在sdkuilds-tools目录下1.以ES文件浏览器为例,命令行中切换到aapt.exe目录执行:aapt d...

微信小程序创建自定义select组件(内含组件与父页面的交互流程)

 闲来无事将制作的select自定义组件制作贴出来,供大家借鉴,也可以为了以后的使用做个备注。 select是我自定义的组件,这个一定要记住,它是自定义组件! 以下书写select组件代码 其中的wxml如下 <view class="select_wrap"> <!-- 左边文字 --> <view class=...

Android Activity 切换动画(非原创)

在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下如何实现左右滑动的切换效果,首先了解一下Activity切换的实现,从Android2.0开始在Activity增加了一个方法: public voidoverridePendingTransition(int enterAnim, int exitAnim) 其中:...