转载至http://blog.csdn.NET/lmj623565791/article/details/24740977

 

Android现在实现Tab类型的界面方式越来越多,今天就把常见的实现方式给大家来个总结。目前写了:

1、传统的ViewPager实现

2、FragmentManager+Fragment实现

3、ViewPager+FragmentPagerAdapter实现

4、TabPageIndicator+ViewPager+FragmentPagerAdapter

 

1、传统的ViewPager实现

主要就是ViewPager+ViewAdapter这个还是比较常见的,就不多说了

效果图:

 

 

 

代码:

 

package com.example.mainframework02;    import java.util.ArrayList;  import java.util.List;    import android.app.Activity;  import android.os.Bundle;  import android.support.v4.view.PagerAdapter;  import android.support.v4.view.ViewPager;  import android.support.v4.view.ViewPager.OnPageChangeListener;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.ImageButton;  import android.widget.ImageView;  import android.widget.LinearLayout;    public class TraditionalViewPagerAcvitity extends Activity  {        /**      * ViewPager      */      private ViewPager mViewPager;      /**      * ViewPager的适配器      */      private PagerAdapter mAdapter;      private List mViews;      private LayoutInflater mInflater;            private int currentIndex;        /**      * 底部四个按钮      */      private LinearLayout mTabBtnWeixin;      private LinearLayout mTabBtnFrd;      private LinearLayout mTabBtnAddress;      private LinearLayout mTabBtnSettings;        @Override      protected void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);          mInflater = LayoutInflater.from(this);          mViewPager = (ViewPager) findViewById(R.id.id_viewpager);                    /**          * 初始化View          */          initView();                    mViewPager.setAdapter(mAdapter);            mViewPager.setOnPageChangeListener(new OnPageChangeListener()          {                @Override              public void onPageSelected(int position)              {                  resetTabBtn();                  switch (position)                  {                  case 0:                      ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))                              .setImageResource(R.drawable.tab_weixin_pressed);                      break;                  case 1:                      ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))                              .setImageResource(R.drawable.tab_find_frd_pressed);                      break;                  case 2:                      ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))                              .setImageResource(R.drawable.tab_address_pressed);                      break;                  case 3:                      ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))                              .setImageResource(R.drawable.tab_settings_pressed);                      break;                  }                    currentIndex = position;              }                @Override              public void onPageScrolled(int arg0, float arg1, int arg2)              {                }                @Override              public void onPageScrollStateChanged(int arg0)              {              }          });        }        protected void resetTabBtn()      {          ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))                  .setImageResource(R.drawable.tab_weixin_normal);          ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))                  .setImageResource(R.drawable.tab_find_frd_normal);          ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))                  .setImageResource(R.drawable.tab_address_normal);          ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))                  .setImageResource(R.drawable.tab_settings_normal);      }        private void initView()      {            mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);          mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);          mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);          mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);            mViews = new ArrayList();          View first = mInflater.inflate(R.layout.main_tab_01, null);          View second = mInflater.inflate(R.layout.main_tab_02, null);          View third = mInflater.inflate(R.layout.main_tab_03, null);          View fourth = mInflater.inflate(R.layout.main_tab_04, null);          mViews.add(first);          mViews.add(second);          mViews.add(third);          mViews.add(fourth);            mAdapter = new PagerAdapter()          {              @Override              public void destroyItem(ViewGroup container, int position, Object object)              {                  container.removeView(mViews.get(position));              }                @Override              public Object instantiateItem(ViewGroup container, int position)              {                  View view = mViews.get(position);                  container.addView(view);                  return view;              }                @Override              public boolean isViewFromObject(View arg0, Object arg1)              {                  return arg0 == arg1;              }                @Override              public int getCount()              {                  return mViews.size();              }          };      }    }  

 

 

 

3、ViewPager+Fragment实现

主要通过ViewPager和FragmentPagerAdapter一起来实现。

效果图:

 

 

 

 

代码:

主Activity

 

  1. package com.example.mainframework03;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import android.os.Bundle;  
  7. import android.support.v4.app.Fragment;  
  8. import android.support.v4.app.FragmentActivity;  
  9. import android.support.v4.app.FragmentPagerAdapter;  
  10. import android.support.v4.view.ViewPager;  
  11. import android.support.v4.view.ViewPager.OnPageChangeListener;  
  12. import android.widget.ImageButton;  
  13. import android.widget.LinearLayout;  
  14.   
  15. public class MainActivity extends FragmentActivity  
  16. {  
  17.   
  18.     private ViewPager mViewPager;  
  19.     private FragmentPagerAdapter mAdapter;  
  20.     private List mFragments = new ArrayList();  
  21.       
  22.       
  23.     /** 
  24.      * 底部四个按钮 
  25.      */  
  26.     private LinearLayout mTabBtnWeixin;  
  27.     private LinearLayout mTabBtnFrd;  
  28.     private LinearLayout mTabBtnAddress;  
  29.     private LinearLayout mTabBtnSettings;  
  30.   
  31.   
  32.     @Override  
  33.     protected void onCreate(Bundle savedInstanceState)  
  34.     {  
  35.         super.onCreate(savedInstanceState);  
  36.         setContentView(R.layout.activity_main);  
  37.         mViewPager = (ViewPager) findViewById(R.id.id_viewpager);  
  38.   
  39.           
  40.         initView();  
  41.           
  42.           
  43.   
  44.         mAdapter = new FragmentPagerAdapter(getSupportFragmentManager())  
  45.         {  
  46.   
  47.             @Override  
  48.             public int getCount()  
  49.             {  
  50.                 return mFragments.size();  
  51.             }  
  52.   
  53.             @Override  
  54.             public Fragment getItem(int arg0)  
  55.             {  
  56.                 return mFragments.get(arg0);  
  57.             }  
  58.         };  
  59.           
  60.         mViewPager.setAdapter(mAdapter);  
  61.           
  62.           
  63.         mViewPager.setOnPageChangeListener(new OnPageChangeListener()  
  64.         {  
  65.   
  66.             private int currentIndex;  
  67.   
  68.             @Override  
  69.             public void onPageSelected(int position)  
  70.             {  
  71.                 resetTabBtn();  
  72.                 switch (position)  
  73.                 {  
  74.                 case 0:  
  75.                     ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))  
  76.                             .setImageResource(R.drawable.tab_weixin_pressed);  
  77.                     break;  
  78.                 case 1:  
  79.                     ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))  
  80.                             .setImageResource(R.drawable.tab_find_frd_pressed);  
  81.                     break;  
  82.                 case 2:  
  83.                     ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))  
  84.                             .setImageResource(R.drawable.tab_address_pressed);  
  85.                     break;  
  86.                 case 3:  
  87.                     ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))  
  88.                             .setImageResource(R.drawable.tab_settings_pressed);  
  89.                     break;  
  90.                 }  
  91.   
  92.                 currentIndex = position;  
  93.             }  
  94.   
  95.             @Override  
  96.             public void onPageScrolled(int arg0, float arg1, int arg2)  
  97.             {  
  98.   
  99.             }  
  100.   
  101.             @Override  
  102.             public void onPageScrollStateChanged(int arg0)  
  103.             {  
  104.             }  
  105.         });  
  106.   
  107.     }  
  108.       
  109.     protected void resetTabBtn()  
  110.     {  
  111.         ((ImageButton) mTabBtnWeixin.findViewById(R.id.btn_tab_bottom_weixin))  
  112.                 .setImageResource(R.drawable.tab_weixin_normal);  
  113.         ((ImageButton) mTabBtnFrd.findViewById(R.id.btn_tab_bottom_friend))  
  114.                 .setImageResource(R.drawable.tab_find_frd_normal);  
  115.         ((ImageButton) mTabBtnAddress.findViewById(R.id.btn_tab_bottom_contact))  
  116.                 .setImageResource(R.drawable.tab_address_normal);  
  117.         ((ImageButton) mTabBtnSettings.findViewById(R.id.btn_tab_bottom_setting))  
  118.                 .setImageResource(R.drawable.tab_settings_normal);  
  119.     }  
  120.   
  121.     private void initView()  
  122.     {  
  123.   
  124.         mTabBtnWeixin = (LinearLayout) findViewById(R.id.id_tab_bottom_weixin);  
  125.         mTabBtnFrd = (LinearLayout) findViewById(R.id.id_tab_bottom_friend);  
  126.         mTabBtnAddress = (LinearLayout) findViewById(R.id.id_tab_bottom_contact);  
  127.         mTabBtnSettings = (LinearLayout) findViewById(R.id.id_tab_bottom_setting);  
  128.   
  129.         MainTab01 tab01 = new MainTab01();  
  130.         MainTab02 tab02 = new MainTab02();  
  131.         MainTab03 tab03 = new MainTab03();  
  132.         MainTab04 tab04 = new MainTab04();  
  133.         mFragments.add(tab01);  
  134.         mFragments.add(tab02);  
  135.         mFragments.add(tab03);  
  136.         mFragments.add(tab04);  
  137.     }  
  138. }  

 

 

 

还有4个TabFragment,下面贴一个,四个基本一样

 

package com.example.mainframework03;    import android.os.Bundle;  import android.support.v4.app.Fragment;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;    public class MainTab01 extends Fragment  {        @Override      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)      {          return  inflater.inflate(R.layout.main_tab_01, container, false);            }    }  


4、TabPageIndicator+ViewPager+FragmentPagerAdapter

 

 

 

1、头部的布局文件,这个很简单:

 

<?xml version="1.0" encoding="utf-8"?>                                        
  


就显示一个图标和标题。
2、主布局文件:

 

 

                                            


布局中仅一个ViewPager,一个ViewPagerIndicator.(本例使用的是其中一种ViewPagerIndicator:TabPagerIndicator)

 

注意它应该紧邻在ViewPager的上方或下方,总之要挨在一起。

 

 

3、主Activity

 

第1步:实例化ViewPager,给ViewPager设置Adapter
第2步:实例化TabPageIndicator,TabPageIndicator与ViewPager绑在一起
第3步:在Indicator上设置OnPagerChangeListner监听器
第4步:定义Adapter(继承FragmentPagerAdapter)

先实例化ViewPager,然后实例化TabPageIndicator,然后设置TabPageIndicator和ViewPager关联,就是调用TabPageIndicator的setViewPager(ViewPager view)方法,这样子就实现了点击上面的Tab,下面的ViewPager切换;滑动ViewPager,上面的Tab跟着切换。
ViewPager的每一个Item我们使用的是Fragment,使用Fragment可以使布局更加灵活一点,建议多用Fragment。
设置监听的时候,需要用Indicator提供的OnPagerChangeListener方法

 

 

package com.zhy.csdndemo;      import com.viewpagerindicator.TabPageIndicator;      import android.os.Bundle;  import android.support.v4.app.FragmentActivity;  import android.support.v4.app.FragmentPagerAdapter;  import android.support.v4.view.ViewPager;      public class MainActivity extends FragmentActivity  {      private TabPageIndicator mIndicator ;      private ViewPager mViewPager ;      private FragmentPagerAdapter mAdapter ;          @Override      protected void onCreate(Bundle savedInstanceState)      {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);                mIndicator = (TabPageIndicator) findViewById(R.id.id_indicator);          mViewPager = (ViewPager) findViewById(R.id.id_pager);          mAdapter = new TabAdapter(getSupportFragmentManager());          mViewPager.setAdapter(mAdapter);          mIndicator.setViewPager(mViewPager, 0);                                    }                  }  


TabAdapter.java

 

 

 

 

package com.zhy.csdndemo;      import android.support.v4.app.Fragment;  import android.support.v4.app.FragmentManager;  import android.support.v4.app.FragmentPagerAdapter;      public class TabAdapter extends FragmentPagerAdapter  {          public static final String[] TITLES = new String[] { "业界", "移动", "研发", "程序员杂志", "云计算" };          public TabAdapter(FragmentManager fm)      {          super(fm);      }          @Override      public Fragment getItem(int arg0)      {          MainFragment fragment = new MainFragment(arg0);          return fragment;      }          @Override      public CharSequence getPageTitle(int position)      {          return TITLES[position % TITLES.length];      }          @Override      public int getCount()      {          return TITLES.length;      }      }  


MainFragment.java

 

 

 

 

package com.zhy.csdndemo;      import android.annotation.SuppressLint;  import android.os.Bundle;  import android.support.v4.app.Fragment;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.TextView;      @SuppressLint("ValidFragment")  public class MainFragment extends Fragment  {          private int newsType = 0;          public MainFragment(int newsType)      {          this.newsType = newsType;      }          @Override      public void onActivityCreated(Bundle savedInstanceState)      {          super.onActivityCreated(savedInstanceState);      }          @Override      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)      {          View view = inflater.inflate(R.layout.tab_item_fragment_main, null);          TextView tip = (TextView) view.findViewById(R.id.id_tip);          tip.setText(TabAdapter.TITLES[newsType]);          return view;      }      }  


4、在styles.xml中自定义Theme

 

                        


在AndroidManifest中注册使用:

 

 

 

 

<?xml version="1.0" encoding="utf-8"?>                                                                                                                            

 

 

 

 

 

 
 
 
 
 
 

更多相关文章

  1. Android(安卓)判断SIM卡属于哪个移动运营商详解及实例
  2. Android开发菜鸟——RecyclerView
  3. android 铃声设置流程
  4. Android(安卓)中单选框或复选框点击其中一个,其余取消操作
  5. Android电话Phone UI分析
  6. iPhone与Android自绘自定义控件比较
  7. 浅析Android中的visibility属性
  8. android开发EditText输入时弹出数字输入键盘
  9. App优化之提升你的App启动速度之实例挑战

随机推荐

  1. ViewModel、ViewModelProviders、ViewMod
  2. Android中代码混淆
  3. 关于android UDP 客户端与delphi UDP服务
  4. Android Exported service does not requ
  5. android 状态栏和导航栏(status and navi
  6. 无标题文章
  7. Android中改变Dialog背景透明度
  8. android 文本框实现搜索和清空效果
  9. 【Android不太基础】换个思路来监听home
  10. android的crash log