1. 四个类似的Frament布局

tab_main_fragment.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="main"
android:textSize="40sp"/>
</LinearLayout>

2.四个类似的Frament类

MainFragment

package com.example.zps.xuxian2.tab;

import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; import com.example.zps.xuxian2.R; /**
* Created by zps on 2015/9/8.
*/
public class MainFragment extends Fragment{
//注意 Fragment 包是V4包
    @Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.tab_main_fragment,container,false);
}
}

3. viewpager 整体界面布局

tab_main_viewpager.xml

<?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="match_parent"
android:orientation="vertical"> <android.support.v4.view.ViewPager
android:id="@+id/tab_main_viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" /> <include layout="@layout/tab_buttom" /> </LinearLayout>

4. 底部的标签兰布局   (插入到3的布局中)

tab_buttom.xml

<?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="wrap_content" android:orientation="horizontal"> <LinearLayout
android:id="@+id/id_tab_main"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"> <ImageButton
android:id="@+id/tab_main_icon_grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_main_icon_grey" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="主页"
android:textColor="#000000" />
</LinearLayout> <LinearLayout
android:id="@+id/id_tab_community"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"> <ImageButton
android:id="@+id/tab_community_icon_grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_community_icon_grey" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="附近"
android:textColor="#000000" />
</LinearLayout> <LinearLayout
android:id="@+id/id_tab_shopping"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"> <ImageButton
android:id="@+id/tab_shopping_cart_icon_grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_shopping_cart_icon_grey" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="购物"
android:textColor="#000000" />
</LinearLayout> <LinearLayout
android:id="@+id/id_tab_me"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"> <ImageButton
android:id="@+id/tab_me_icon_grey"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#00000000"
android:clickable="false"
android:src="@drawable/tab_me_icon_grey" /> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="个人"
android:textColor="#000000" />
</LinearLayout>
</LinearLayout>

5 . 适配器FragmentPagerAdapter(用于2的适配器)

package com.example.zps.xuxian2.tab;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter; import java.util.List; /**
* Created by zps on 2015/9/8.
*/
public class TabFragmentPagerAdapter extends FragmentPagerAdapter{
//继承FragmentPagerAdapter类 ,并自定义的构造器
private List<Fragment> fragments;
public TabFragmentPagerAdapter(FragmentManager fm,List<Fragment> fragments) {
super(fm);
this.fragments =fragments;
} @Override
public Fragment getItem(int position) { return fragments.get(position); } @Override
public int getCount() {
return fragments.size();
}
}

6.总的活动类,实现滑动界面和点击Tab图标改变界面

TabMainActivity

package com.example.zps.xuxian2.tab;

import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout; import com.example.zps.xuxian2.R; import java.nio.IntBuffer;
import java.util.ArrayList;
import java.util.List; /**
* Created by zps on 2015/9/8.
*/
public class TabMainActivity extends FragmentActivity implements View.OnClickListener {//注意是继承FragmentActivity!!我找了半天的错误 private LinearLayout mTabMain;
private LinearLayout mTabCommunity;
private LinearLayout mTabShopping;
private LinearLayout mTabMe;
private ImageButton mImageTabMain;
private ImageButton mImageTabCommunity;
private ImageButton mImageTabShopping;
private ImageButton mImageTabMe; private ViewPager mViewPager;
private TabFragmentPagerAdapter mAdapter;
private List<Fragment> mFragments; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.tab_main_viewpager);
initView();
initClickListener();
} private void initView() { mViewPager = (ViewPager) findViewById(R.id.tab_main_viewpager);
mTabMain = (LinearLayout) findViewById(R.id.id_tab_main);
mTabCommunity = (LinearLayout) findViewById(R.id.id_tab_community);
mTabShopping = (LinearLayout) findViewById(R.id.id_tab_shopping);
mTabMe = (LinearLayout) findViewById(R.id.id_tab_me);
mImageTabMain = (ImageButton) findViewById(R.id.tab_main_icon_grey);
mImageTabCommunity = (ImageButton) findViewById(R.id.tab_community_icon_grey);
mImageTabShopping = (ImageButton) findViewById(R.id.tab_shopping_cart_icon_grey);
mImageTabMe = (ImageButton) findViewById(R.id.tab_me_icon_grey); mFragments = new ArrayList<Fragment>();
Fragment mTab_01 = new MainFragment();
Fragment mTab_02 = new CommunityFragment();
Fragment mTab_03 = new ShoppingFragment();
Fragment mTab_04 = new MeFragment();
mFragments.add(mTab_01);
mFragments.add(mTab_02);
mFragments.add(mTab_03);
mFragments.add(mTab_04); mAdapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), mFragments);
mViewPager.setAdapter(mAdapter);
//设置滑动监听器
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//滑动时 改变图标状态
@Override
public void onPageSelected(int position) {
int currentItem = mViewPager.getCurrentItem();
initTabImage();
switch (currentItem) {
case 0:
mImageTabMain.setImageResource(R.drawable.tab_main_icon_green);
break;
case 1:
mImageTabCommunity.setImageResource(R.drawable.tab_community_icon_green);
break;
case 2:
mImageTabShopping.setImageResource(R.drawable.tab_shopping_cart_icon_green);
break;
case 3:
mImageTabMe.setImageResource(R.drawable.tab_me_icon_green);
break; }
}
@Override
public void onPageScrollStateChanged(int state) { }
}); }
//初始的图标状态(滑动和点击事件改变的时候都要初始化)
private void initTabImage() {
mImageTabMain.setImageResource(R.drawable.tab_main_icon_grey);
mImageTabCommunity.setImageResource(R.drawable.tab_community_icon_grey);
mImageTabShopping.setImageResource(R.drawable.tab_shopping_cart_icon_grey);
mImageTabMe.setImageResource(R.drawable.tab_me_icon_grey);
} //设置图标点击监听器
private void initClickListener() {
mTabMain.setOnClickListener(this);
mTabCommunity.setOnClickListener(this);
mTabShopping.setOnClickListener(this);
mTabMe.setOnClickListener(this);
} @Override
public void onClick(View v) { switch (v.getId()) {
case R.id.id_tab_main:
// initTabImage();
//mImageTabMain.setImageResource(R.drawable.tab_main_icon_green);
//注意上面修改的只是图标的状态,还要修改相对应的fragment;
setSelect(0);
break;
case R.id.id_tab_community:
setSelect(1);
break;
case R.id.id_tab_shopping:
setSelect(2);
break;
case R.id.id_tab_me:
setSelect(3);
break;
}
} //设置将点击的那个图标为亮色,切换内容区域
private void setSelect(int i) { initTabImage();
switch (i) {
case 0:
mImageTabMain.setImageResource(R.drawable.tab_main_icon_green);
break;
case 1:
mImageTabCommunity.setImageResource(R.drawable.tab_community_icon_green);
break;
case 2:
mImageTabShopping.setImageResource(R.drawable.tab_shopping_cart_icon_green);
break;
case 3:
mImageTabMe.setImageResource(R.drawable.tab_me_icon_green);
break;
default:
break;
}
mViewPager.setCurrentItem(i);
}
}

ViewPager + Fragment 实现主界面底部导航栏的更多相关文章

  1. Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏

    在商城第一篇的开篇当中,我们看到商城的效果图里面有一个底部导航栏效果,如下图所示: 今天我们就来实现商城底部导航栏,最终效果图如下所示:   那么这种效果是如何实现,实现的方式有很多种,最常见的就是使 ...

  2. Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面

    说明: 实现效果: 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现,更方便的实现图片和字体颜色的改变,更方便的通过RadioButton的点击事件来控制页 ...

  3. [置顶] xamarin android Fragment实现底部导航栏

    前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment  Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...

  4. Android UI-仿微信底部导航栏布局

    现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢.我们开发的主要的还是讲的是如何如 ...

  5. TextView+Fragment实现底部导航栏

    前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以 ...

  6. Android底部导航栏创建——ViewPager + RadioGroup

    原创文章,引用请注明出处:http://www.cnblogs.com/baipengzhan/p/6270201.html Android底部导航栏有多种实现方式,本文详解其中的ViewPager ...

  7. AndroidStudio制作底部导航栏以及用Fragment实现切换功能

    前言 大家好,给大家带来AndroidStudio制作底部导航栏以及用Fragment实现切换功能的概述,希望你们喜欢 学习目标 AndroidStudio制作底部导航栏以及用Fragment实现切换 ...

  8. Android_ViewPager+Fragment实现页面滑动和底部导航栏

    1.Xml中底部导航栏由一个RadioGroup组成,其上是ViewPager. <?xml version="1.0" encoding="utf-8" ...

  9. 二、Fragment+RadioButton实现底部导航栏

    在App中经常看到这样的tab底部导航栏   那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activi ...

随机推荐

  1. laydate设置起始时间,laydate设置开始时间和结束时间

    //设置开始时间 var startDate = laydate.render({ elem: '#start_date',//开始时间选择控件id min:'2018-6-1', type: 'da ...

  2. 006-spring cache-缓存实现-01-原生实现

    一.原生实现 1.1.pom <!-- 缓存 --> <dependency> <groupId>org.springframework.boot</grou ...

  3. 【代码片段】Python发送带图片的邮件

    # coding=utf-8 import smtplib from email.mime.text import MIMEText from email.mime.multipart import ...

  4. 前端迭代取出 后台map返回的数据

    <body> <div th:each="map : ${response}"> <span th:text="${map.key}&quo ...

  5. python学习笔记(二十九)为什么python的多线程不能利用多核CPU

    问题:为什么python的多线程不能利用多核CPU,但是咱们在写代码的时候,多线程的确是在并发,而且还比单线程快原因:因为GIL,python只有一个GIL,运行python时,就要拿到这个锁才能执行 ...

  6. [py][mx]实现按照课程机构排名,按照学习人数排名

    原型是 实现效果 因为要按照这两个指标排名, 模型中现在还没有这2个字段(整数),所以需要修改模型. 修改模型,添加2个排序指标的字段 class CourseOrg(models.Model): . ...

  7. POJ2186:Popular Cows(tarjan+缩点)

    题目解析: 这题题意没什么好说的,解法也挺简单的,只要会tarjan算法+只有一个出度为0的强连通分量题目有解这题就迎刃而解了. #include <iostream> #include ...

  8. ACM ICPC, Amman Collegiate Programming Contest (2018) Solution

    Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...

  9. SQL学习笔记三(补充-1)之MySQL存储引擎

    阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的 ...

  10. 20145211《网络对抗》注入Shellcode并执行&&Return-to-libc攻击

    Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...