欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

实现、设置-Android TabWidget-by小雨

发布时间:2023/12/10 66 豆豆
生活随笔 收集整理的这篇文章主要介绍了 实现、设置-Android TabWidget-by小雨 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

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

    

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

    

 

    

  • TabTest.java   
  •   
  • view plaincopy to clipboardprint?   
  • package org.hualang.tab;     
  • import android.app.Activity;     
  • import android.app.TabActivity;     
  • import android.graphics.Color;     
  • import android.os.Bundle;     
  • import android.widget.TabHost;     
  • import android.widget.Toast;     
  • import android.widget.TabHost.OnTabChangeListener;     
  • public class TabTest extends TabActivity {     
  •     /** Called when the activity is first created. */     
  •     TabHost tabhost;     
  •     @Override     
  •     public void onCreate(Bundle savedInstanceState) {     
  •         super.onCreate(savedInstanceState);     
  •         setContentView(R.layout.main);     
  •         //获得TabHost对象     
  •         tabhost = getTabHost();     
  •         //为TabHost添加签标     
  •         //新建一个newTabSpec(newTabSpec)     
  •         //设置其签标和标图(setIndicator)     
  •         //设置容内(setContent)     
  •         tabhost.addTab(tabhost.newTabSpec("tab1")     
  •                 .setIndicator("TAB 1",getResources().getDrawable(R.drawable.img1))     
  •                 .setContent(R.id.text1));     
  •         tabhost.addTab(tabhost.newTabSpec("tab2")     
  •                 .setIndicator("TAB 2",getResources().getDrawable(R.drawable.img2))     
  •                 .setContent(R.id.text2));     
  •         tabhost.addTab(tabhost.newTabSpec("tab3")     
  •                 .setIndicator("TAB 3",getResources().getDrawable(R.drawable.img3))     
  •                 .setContent(R.id.text3));     
  •         //设置TabHost的背景颜色     
  •         //tabhost.setBackgroundColor(Color.argb(150,22,70,150));     
  •         //设置TabHost的背景图片资源     
  •         tabhost.setBackgroundResource(R.drawable.bg0);     
  •         //设置前当示显哪个签标     
  •         tabhost.setCurrentTab(0);     
  •         //签标换切事件处理,setOnTabChangedListener     
  •         tabhost.setOnTabChangedListener(new OnTabChangeListener()     
  •         {     
  •             public void onTabChanged(String tabId)     
  •             {     
  •                 Toast toast=Toast.makeText(getApplicationContext(), "现在是"+tabId+"签标", Toast.LENGTH_SHORT);     
  •                 toast.show();     
  •             }     
  •         });     
  •              
  •     }     
  • }     
  •   
  •  

        main.xml

        

  • <?xml version="1.0" encoding="utf-8"?>     
  • <TabHost xmlns:android="http://schemas.android.com/apk/res/android"     
  •     android:id="@android:id/tabhost"     
  •     android:layout_width="fill_parent"     
  •     android:layout_height="fill_parent">     
  •     <LinearLayout     
  •         android:orientation="vertical"     
  •         android:layout_width="fill_parent"     
  •         android:layout_height="fill_parent">     
  •         <TabWidget     
  •             android:id="@android:id/tabs"     
  •             android:layout_width="fill_parent"     
  •             android:layout_height="wrap_content" />     
  •         <FrameLayout     
  •             android:id="@android:id/tabcontent"     
  •             android:layout_width="fill_parent"     
  •             android:layout_height="fill_parent">     
  •             <TextView      
  •                 android:id="@+id/text1"     
  •                 android:layout_width="fill_parent"     
  •                 android:layout_height="fill_parent"      
  •                 android:text="选项卡1" />     
  •             <TextView      
  •                 android:id="@+id/text2"     
  •                 android:layout_width="fill_parent"     
  •                 android:layout_height="fill_parent"      
  •                 android:text="选项卡2" />     
  •             <TextView      
  •                 android:id="@+id/text3"     
  •                 android:layout_width="fill_parent"     
  •                 android:layout_height="fill_parent"      
  •                 android:text="选项卡3" />     
  •         </FrameLayout>     
  •     </LinearLayout>     
  • </TabHost>    
  •     


        

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

        

    一、通用做法

        

    继承TabActivity,实现自己的TabActivity

        

     

        

    [java] view plaincopy
  • import android.app.Activity;  
  • import android.app.TabActivity;  
  • import android.content.Intent;  
  • import android.os.Bundle;  
  • import android.widget.TabHost;  
  • import android.widget.TabHost.OnTabChangeListener;  
  • public class TabWidgetDemo2 extends TabActivity implements OnTabChangeListener {  
  •      private TabHost mTabHost;  
  •        
  •     @Override  
  •     protected void onCreate(Bundle savedInstanceState) {  
  •         // TODO Auto-generated method stub  
  •         super.onCreate(savedInstanceState);  
  •           
  •         setContentView(R.layout.tabwidgetdemo2);    
  •         mTabHost = getTabHost();  
  •         mTabHost.setOnTabChangedListener(this);  
  •         setupTab1();  
  •         setupTab2();  
  •         mTabHost.setCurrentTab(1);  
  •     }  
  •     private void setupTab2() {  
  •         // TODO Auto-generated method stub  
  •         Intent intent = new Intent();  
  •         intent.setAction(Intent.ACTION_MAIN);  
  •         intent.setClass(this, TabWidget2.class);  
  •         mTabHost.addTab(mTabHost.newTabSpec("TabWidget2")  
  •                 .setIndicator("TabWidget2",getResources().getDrawable(R.drawable.icon))  
  •                 .setContent(intent));  
  •     }  
  •     private void setupTab1() {  
  •         // TODO Auto-generated method stub  
  •         Intent intent = new Intent();  
  •         intent.setAction(Intent.ACTION_MAIN);  
  •         intent.setClass(this, TabWidget1.class);  
  •         mTabHost.addTab(mTabHost.newTabSpec("TabWidget1")  
  •                 .setIndicator("TabWidget1",getResources().getDrawable(R.drawable.icon))  
  •                 .setContent(intent));  
  •     }  
  •     public void onTabChanged(String tabId) {  
  •         // TODO Auto-generated method stub  
  •         Activity activity = getLocalActivityManager().getActivity(tabId);  
  •         if (activity != null) {  
  •             activity.onWindowFocusChanged(true);  
  •         }  
  •     }  
  •        
  •        
  • }  
  •     

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

        

     

        

    [java] view plaincopy
  • import android.app.Activity;  
  • import android.content.Intent;  
  • import android.os.Bundle;  
  • import com.android.exampledemo.R;  
  • import com.android.exampledemo.util.DemoUtils;  
  • public class TabWidget1 extends Activity {  
  •     @Override  
  •     protected void onCreate(Bundle savedInstanceState) {  
  •         // TODO Auto-generated method stub  
  •         super.onCreate(savedInstanceState);  
  •           
  •         Intent intent = this.getIntent();  
  •         if (intent.getAction().equals(Intent.ACTION_MAIN)){  
  •             setContentView(R.layout.tabwidgetdemo2_1);  
  •         }  
  •         else {  
  •             setContentView(R.layout.tabwidget_1);  
  •             DemoUtils.updateButtonBar((Activity)this,R.id.contactstab);  
  •         }  
  •     }  
  • }  
  •     

     

        

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

        

     

        

    [java] view plaincopy
  • import com.android.exampledemo.R;  
  • import com.android.exampledemo.util.DemoUtils;  
  • import android.app.Activity;  
  • import android.content.Intent;  
  • import android.os.Bundle;  
  • public class TabWidget2 extends Activity {  
  •     @Override  
  •     protected void onCreate(Bundle savedInstanceState) {  
  •         // TODO Auto-generated method stub  
  •         super.onCreate(savedInstanceState);  
  •           
  •         Intent intent = this.getIntent();  
  •           
  •         if (intent.getAction().equals(Intent.ACTION_MAIN)){  
  •             setContentView(R.layout.tabwidgetdemo2_1);  
  •         }  
  •         else {  
  •             setContentView(R.layout.tabwidget_2);  
  •             DemoUtils.updateButtonBar((Activity)this,R.id.groupstab);  
  •         }  
  •     }  
  • }  
  •     

     

        

    最后就是各个Activity对应的layout

        

    1.tabwidgetdemo2.xml

        

     

        

    [xhtml] view plaincopy
  • <?xml version="1.0" encoding="utf-8"?>  
  • <TabHost  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:id="@android:id/tabhost"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent">  
  •   <LinearLayout   
  •     android:orientation="vertical"  
  •     android:layout_width="fill_parent"  
  •     android:layout_height="fill_parent">  
  •     <TabWidget android:id="@android:id/tabs"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="68dip"  
  •         android:paddingLeft="1dip"  
  •         android:paddingRight="1dip"  
  •         android:paddingTop="4dip"  
  •         />  
  •     <FrameLayout android:id="@android:id/tabcontent"  
  •         android:layout_width="fill_parent"  
  •         android:layout_height="0dip"  
  •         android:layout_weight="1"  
  •         />  
  •     </LinearLayout>   
  • </TabHost>  
  •     

    2.二个sub tab对应的layout

        

     

        

    [xhtml] view plaincopy
  • Layout1  
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent"  
  •   android:background="#FFF">  
  •   <TextView android:id="@+id/textview"   
  •     android:layout_width="wrap_content"   
  •     android:layout_height="wrap_content"  
  •     android:text="Tab Widget first">  
  •    </TextView>  
  • </LinearLayout>  
  • Layout2  
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent"  
  •   android:background="#FFF">  
  •   <TextView android:id="@+id/textview"   
  •     android:layout_width="wrap_content"   
  •     android:layout_height="wrap_content"  
  •     android:text="Tab Widget second">  
  •    </TextView>  
  • </LinearLayout>  
  •     

     

        

     

        

    方法2:

        

    先创立一个Activity (TabWidgetDemo)

        

     

        

    [c-sharp] view plaincopy
  • 1.TabWidgetDemo.java  
  • import com.android.exampledemo.R;  
  • import com.android.exampledemo.util.DemoUtils;  
  • import android.app.Activity;  
  • import android.content.Context;  
  • import android.content.SharedPreferences;  
  • import android.os.Bundle;  
  • //not use tabhost to organized   
  • public class TabWidgetDemo extends Activity {  
  •     @Override  
  •     protected void onCreate(Bundle savedInstanceState) {  
  •         // TODO Auto-generated method stub  
  •         super.onCreate(savedInstanceState);  
  •         //int activeTab = DemoUtils.getIntPref(this, "activetab", R.id.artisttab);  
  •         SharedPreferences prefs =  
  •             getSharedPreferences(getPackageName(), Context.MODE_PRIVATE);  
  •         int activeTab = prefs.getInt("activetab", R.id.contactstab);  
  •         if (activeTab != R.id.contactstab  
  •                 && activeTab != R.id.groupstab) {  
  •             activeTab = R.id.contactstab;  
  •         }  
  •         DemoUtils.activateTab(this, activeTab);  
  •     }  
  • }  
  • 2.DemoUtils  
  • import android.app.Activity;  
  • import android.content.Intent;  
  • import android.net.Uri;  
  • import android.view.View;  
  • import android.widget.TabWidget;  
  • import com.android.exampledemo.R;  
  • public class DemoUtils {  
  •     static int sActiveTabIndex = -1;  
  •       
  •     public static void activateTab(Activity a,int active_id){  
  •         Intent intent = new Intent(Intent.ACTION_PICK);  
  •         switch (active_id) {  
  •         case R.id.contactstab:  
  •             intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_contacts");  
  •             break;  
  •         case R.id.groupstab:  
  •             intent.setDataAndType(Uri.EMPTY, "vnd.android.cursor.dir/tb_groups");  
  •             break;  
  •         default:  
  •             return;  
  •         }  
  •         intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
  •         a.startActivity(intent);  
  •         a.finish();  
  •         a.overridePendingTransition(0,0);  
  •     }  
  •       
  •       
  •     public static void updateButtonBar(Activity a, int highlight) {  
  •         final TabWidget ll = (TabWidget) a.findViewById(R.id.buttonbar);  
  •           
  •          for (int i = ll.getChildCount() - 1; i >= 0; i--) {  
  •              View v = ll.getChildAt(i);  
  •              boolean isActive = (v.getId() == highlight);  
  •              if (isActive) {  
  •                     ll.setCurrentTab(i);  
  •                     sActiveTabIndex = i;  
  •              }  
  •                
  •              v.setTag(i);  
  •              v.setOnClickListener(new View.OnClickListener() {  
  •                     public void onClick(View v) {  
  •                         int id = v.getId();  
  •                         if (id == ll.getChildAt(sActiveTabIndex).getId()) {  
  •                             return;  
  •                         }  
  •                         activateTab((Activity)ll.getContext(),id );  
  •                         ll.setCurrentTab((Integer) v.getTag());  
  •                     }});  
  •          }  
  •     }  
  • }  
  •      

        

     

        

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

        

    1>buttonbar.xml

        

     

        

    [xhtml] view plaincopy
  • <?xml version="1.0" encoding="utf-8"?>  
  • <TabWidget xmlns:android="http://schemas.android.com/apk/res/android"  
  •     android:id="@+id/buttonbar"  
  •     android:layout_width="match_parent"  
  •     android:layout_height="wrap_content" >  
  •     <TextView  
  •         android:id="@+id/contactstab"  
  •         android:focusable="true"  
  •         android:drawableTop="@drawable/icon"  
  •         android:background="@drawable/buttonbarbackground"  
  •         android:text="Contacts"  
  •         android:textColor="@color/tab_indicator_text"  
  •         android:textAppearance="?android:attr/textAppearanceSmall"  
  •         android:paddingTop="7dip"  
  •         android:paddingBottom="2dip"  
  •         android:gravity="center"  
  •         android:layout_weight="1"  
  •         android:layout_marginLeft="-3dip"  
  •         android:layout_marginRight="-3dip"  
  •         android:layout_width="match_parent"  
  •         android:layout_height="84dip"  
  •         android:singleLine="true"  
  •         android:ellipsize="marquee" />  
  •     <TextView  
  •         android:id="@+id/groupstab"  
  •         android:focusable="true"  
  •         android:drawableTop="@drawable/icon"  
  •         android:background="@drawable/buttonbarbackground"  
  •         android:text="Group"  
  •         android:textColor="@color/tab_indicator_text"  
  •         android:textAppearance="?android:attr/textAppearanceSmall"  
  •         android:paddingTop="7dip"  
  •         android:paddingBottom="2dip"  
  •         android:gravity="center"  
  •         android:layout_weight="1"  
  •         android:layout_marginLeft="-3dip"  
  •         android:layout_marginRight="-3dip"  
  •         android:layout_width="match_parent"  
  •         android:layout_height="84dip"  
  •         android:singleLine="true"  
  •         android:ellipsize="marquee" />  
  • </TabWidget>  
  •     

    2>tabwidget_1.xml

        

     

        

    [xhtml] view plaincopy
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent">  
  •     
  •   <include layout="@layout/battonbar" />  
  •     
  •   <ExpandableListView android:id="@+id/android:list"  
  •                   android:layout_width="fill_parent"   
  •                   android:layout_height="wrap_content"  
  •                   android:footerDividersEnabled="true"  
  •                   android:fadeScrollbars="true"  
  •                   android:drawSelectorOnTop="true">  
  •   </ExpandableListView>  
  •     
  • </LinearLayout>  
  •     

    3> tabwidget_2.xml

        

     

        

    [xhtml] view plaincopy
  • <?xml version="1.0" encoding="utf-8"?>  
  • <LinearLayout  
  •   xmlns:android="http://schemas.android.com/apk/res/android"  
  •   android:layout_width="fill_parent"  
  •   android:layout_height="fill_parent">  
  •     
  •   <include layout="@layout/battonbar" />  
  •     
  • </LinearLayout>  
  •     

     

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

    转载于:https://www.cnblogs.com/jiangu66/archive/2013/04/14/3020375.html

    总结

    以上是生活随笔为你收集整理的实现、设置-Android TabWidget-by小雨的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。