ViewPager + Fragment 实现主界面底部导航栏
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 实现主界面底部导航栏的更多相关文章
- Android商城开发系列(三)——使用Fragment+RadioButton实现商城底部导航栏
在商城第一篇的开篇当中,我们看到商城的效果图里面有一个底部导航栏效果,如下图所示: 今天我们就来实现商城底部导航栏,最终效果图如下所示: 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使 ...
- Android——Fragment实例精讲——底部导航栏+ViewPager滑动切换页面
说明: 实现效果: 1- 用ViewPager实现Fragmen之间的切换 2- 底部用RadioGroup实现,更方便的实现图片和字体颜色的改变,更方便的通过RadioButton的点击事件来控制页 ...
- [置顶]
xamarin android Fragment实现底部导航栏
前段时间写了篇关于Fragment的文章,介绍了基础的概念,用静态和动态的方式加载Fragment Xamarin Android Fragment的两种加载方式.下面的这个例子介绍xamarin ...
- Android UI-仿微信底部导航栏布局
现在App基本的标配除了侧滑菜单,还有一个就是底部导航栏,常见的聊天工具QQ,微信,购物App都有底部导航栏,用户可以随便切换看不同的内容,说是情怀也好,用户体验也罢.我们开发的主要的还是讲的是如何如 ...
- TextView+Fragment实现底部导航栏
前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以 ...
- Android底部导航栏创建——ViewPager + RadioGroup
原创文章,引用请注明出处:http://www.cnblogs.com/baipengzhan/p/6270201.html Android底部导航栏有多种实现方式,本文详解其中的ViewPager ...
- AndroidStudio制作底部导航栏以及用Fragment实现切换功能
前言 大家好,给大家带来AndroidStudio制作底部导航栏以及用Fragment实现切换功能的概述,希望你们喜欢 学习目标 AndroidStudio制作底部导航栏以及用Fragment实现切换 ...
- Android_ViewPager+Fragment实现页面滑动和底部导航栏
1.Xml中底部导航栏由一个RadioGroup组成,其上是ViewPager. <?xml version="1.0" encoding="utf-8" ...
- 二、Fragment+RadioButton实现底部导航栏
在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activi ...
随机推荐
- mysql 数据操作 多表查询 准备
为什么需要多表查询: 因为我们不可能把所有数据都放在一张表里 我们把不同数据存储 放在一张一张不同表 方便管理,但我们为了方便管理,把数据拆分到一张一张表去存储. 但是数据还是一个整体,数据之间是有关 ...
- 使用distcp并行拷贝大数据文件
以前我们介绍的访问HDFS的方法都是单线程的,Hadoop中有一个工具可以让我们并行的拷贝大量数据文件,这个工具就是distcp. distcp的典型应用就是在两个HDFS集群中拷贝文件,如果两个集群 ...
- 安装完C++builder6.0启动的时候总是出现无法将'C:\Program Files\Borland\CBuilder6\Bin\bcb.$$$'重命名为bcb.dro
:兼容性问题 运行前右键属性“兼容性”-尝试不同的兼容性.比如“windows 8”
- 逆分布函数法生成随机数(指数分布) R语言实现
先说明一下符号:U(0,1)-均匀分布,”~“表示服从xxx分布,F(x),为需要生成的随机数的分布函数,invF(x)表示逆分布函数,那么算法步骤如下: step 1: 产生 u~U(0,1) st ...
- ubuntu16.04(64位)安装 Drcom
一 : 下载DrClient(DrcomAndPPOE) 解压 下载地址 https://www.baidu.com/s?wd=DrClient(DrcomAndPPOE)&rsv_spt ...
- ng-深度学习-课程笔记-8: 超参数调试,Batch正则(Week3)
1 调试处理( tuning process ) 如下图所示,ng认为学习速率α是需要调试的最重要的超参数. 其次重要的是momentum算法的β参数(一般设为0.9),隐藏单元数和mini-batc ...
- window.location.href = basePath + "paper/deleteExpertComment.action?expertId="+$(this).prev().val();
window.location.href = basePath + "paper/deleteExpertComment.action?expertId="+$(this).pre ...
- 前端学习笔记之CSS后代选择器、子元素选择器、相邻兄弟选择器区别与详解
派生选择器用的很多,派生选择器具体包括为后代选择器.子元素选择器.相邻兄弟选择器,我们来理解一下他们之间的具体用法与区别. 1.css后代选择器语法:h1 em {color:red;} 表示的是从h ...
- BZOJ2221: [Jsoi2009]面试的考验
传送门 一句话题意,给定一个序列,询问区间内差值的绝对值的最小值. 这道题之前见过一次,似乎是在一次UER上,那一道题当时是用了近似算法才能过. 数据保证数列随机. 这道题显然非常适合离线的做法,考虑 ...
- vue-Treeselect实现组织机构(员工)下拉树的功能
知识点:前端使用vuetree的组件库,调用后台查询组织机构,包括人员的接口 实现下拉树的功能 查考: vue-treeselect官网:https://vue-treeselect.js.org/ ...