使用ViewPager + Fragment实现微信底部Tab效果
下面是最常用的Tab布局,最终实现效果

MainActivity的主文件代码:
public class MainActivity extends FragmentActivity implements View.OnClickListener { //声明ViewPager private ViewPager mViewPager; //适配器 private FragmentPagerAdapter mAdapter; //装载Fragment的集合 private List<Fragment> mFragments; //四个Tab对应的布局 private LinearLayout mTabWeixin; private LinearLayout mTabFrd; private LinearLayout mTabAddress; private LinearLayout mTabSetting; //四个Tab对应的ImageButton private ImageButton mImgWeixin; private ImageButton mImgFrd; private ImageButton mImgAddress; private ImageButton mImgSetting; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); initViews();//初始化控件 initEvents();//初始化事件 initDatas();//初始化数据 } private void initDatas() { mFragments = new ArrayList<>(); //将四个Fragment加入集合中 mFragments.add(new WeixinFragment()); mFragments.add(new PengYouFragment()); mFragments.add(new TongXunFragment()); mFragments.add(new SheZhiFragment()); //初始化适配器 mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) { @Override public Fragment getItem(int position) {//从集合中获取对应位置的Fragment return mFragments.get(position); } @Override public int getCount() {//获取集合中Fragment的总数 return mFragments.size(); } }; //不要忘记设置ViewPager的适配器 mViewPager.setAdapter(mAdapter); //设置ViewPager的切换监听 mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override //页面滚动事件 public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } //页面选中事件 @Override public void onPageSelected(int position) { //设置position对应的集合中的Fragment mViewPager.setCurrentItem(position); resetImgs(); selectTab(position); } @Override //页面滚动状态改变事件 public void onPageScrollStateChanged(int state) { } }); } private void initEvents() { //设置四个Tab的点击事件 mTabWeixin.setOnClickListener(this); mTabFrd.setOnClickListener(this); mTabAddress.setOnClickListener(this); mTabSetting.setOnClickListener(this); } //初始化控件 private void initViews() { mViewPager = (ViewPager) findViewById(R.id.id_viewpager); mTabWeixin = (LinearLayout) findViewById(R.id.id_tab_weixin); mTabFrd = (LinearLayout) findViewById(R.id.id_tab_frd); mTabAddress = (LinearLayout) findViewById(R.id.id_tab_address); mTabSetting = (LinearLayout) findViewById(R.id.id_tab_setting); mImgWeixin = (ImageButton) findViewById(R.id.id_tab_weixin_img); mImgFrd = (ImageButton) findViewById(R.id.id_tab_frd_img); mImgAddress = (ImageButton) findViewById(R.id.id_tab_address_img); mImgSetting = (ImageButton) findViewById(R.id.id_tab_setting_img); } @Override public void onClick(View v) { //先将四个ImageButton置为灰色 resetImgs(); //根据点击的Tab切换不同的页面及设置对应的ImageButton为绿色 switch (v.getId()) { case R.id.id_tab_weixin: selectTab(0); break; case R.id.id_tab_frd: selectTab(1); break; case R.id.id_tab_address: selectTab(2); break; case R.id.id_tab_setting: selectTab(3); break; } } private void selectTab(int i) { //根据点击的Tab设置对应的ImageButton为绿色 switch (i) { case 0: mImgWeixin.setImageResource(R.mipmap.tab_weixin_pressed); break; case 1: mImgFrd.setImageResource(R.mipmap.tab_find_frd_pressed); break; case 2: mImgAddress.setImageResource(R.mipmap.tab_address_pressed); break; case 3: mImgSetting.setImageResource(R.mipmap.tab_settings_pressed); break; } //设置当前点击的Tab所对应的页面 mViewPager.setCurrentItem(i); } //将四个ImageButton设置为灰色 private void resetImgs() { mImgWeixin.setImageResource(R.mipmap.tab_weixin_normal); mImgFrd.setImageResource(R.mipmap.tab_find_frd_normal); mImgAddress.setImageResource(R.mipmap.tab_address_normal); mImgSetting.setImageResource(R.mipmap.tab_settings_normal); } }
“微信”“朋友” “通讯录” “设置”所对应的Fragment
public class WeixinFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.weixin_main, container, false); return view; } }
public class PengYouFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.pengyou_main, container, false); return view; } }
public class TongXunFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.tongxun_main, container, false); return view; } }
public class SheZhiFragment extends Fragment { @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.shezhi_main, container, false); return view; } }
顶部布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:background="@android:drawable/title_bar" android:gravity="center" android:layout_width="match_parent" android:layout_height="45dp"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="微信" android:textColor="#ffffff" android:textSize="20sp" android:textStyle="bold"/> </LinearLayout>
底部布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="55dp" android:gravity="center" android:background="#FFF" android:orientation="horizontal"> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:id="@+id/id_tab_weixin" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/id_tab_weixin_img" android:clickable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/tab_weixin_pressed" android:background="#00000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#333" android:text="微信"/> </LinearLayout> <LinearLayout android:id="@+id/id_tab_frd" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/id_tab_frd_img" android:clickable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/tab_find_frd_normal" android:background="#00000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#333" android:text="朋友"/> </LinearLayout> <LinearLayout android:id="@+id/id_tab_address" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/id_tab_address_img" android:clickable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/tab_address_normal" android:background="#00000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#333" android:text="通讯录"/> </LinearLayout> <LinearLayout android:id="@+id/id_tab_setting" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:orientation="vertical"> <ImageButton android:id="@+id/id_tab_setting_img" android:clickable="false" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@mipmap/tab_settings_normal" android:background="#00000000"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textColor="#333" android:text="设置"/> </LinearLayout> </LinearLayout>
四个Tab相应的布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="我是微信"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="我是朋友"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="我是通讯"/> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:textSize="30sp" android:text="我是设置"/> </LinearLayout>
主布局文件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <include layout="@layout/top"/> <android.support.v4.view.ViewPager android:id="@+id/id_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </android.support.v4.view.ViewPager> <include layout="@layout/bottom"/> </LinearLayout>
以上就是效果的完整代码,直接复制就可以使用,注意把图片换成自己的图片!!!

浙公网安备 33010602011771号