BottomBar

BottomBar是Github上的一个开源框架,因为从1.3.3开始不支持fragments了,要自己配置,弄了很久,不管是app的fragment还是V4 的程序总是总是闪退。于是就用这种方式实现了,效果还不错。github有详细说明,多余的就不说了。

这个roughike是这个项目的所有者(大神致敬)。

我用的是Android studio开发,fragment全部导的V4的包(以为最开始就支持的是v4的,后面也支持了app.fragment).

首先是dependencies

compile 'com.jakewharton:butterknife:7.0.0'

compile 'com.roughike:bottom-bar:1.3.3'

添加第二个就行了,我这用到了butterknife(不知道的可以百度,出自jakewharton大神的一款View注入框架)。

从menu添加items

res/menu/bottombar_menu.xml

android:id="@+id/bb_menu_recents"

android:icon="@drawable/ic_recents"

android:title="Recents" />

android:id="@+id/bb_menu_favorites"

android:icon="@drawable/ic_favorites"

android:title="Favorites" />

android:id="@+id/bb_menu_nearby"

android:icon="@drawable/ic_nearby"

android:title="Nearby" />

android:id="@+id/bb_menu_friends"

android:icon="@drawable/ic_friends"

android:title="Friends" />

android:id="@+id/bb_menu_food"

android:icon="@drawable/ic_restaurants"

android:title="Food" />

在activity中初始化BottomBar和ViewPager

public class MainActivity extends FragmentActivity {

@Bind(R.id.viewPager)

ViewPager viewPager;

@Bind(R.id.myCoordinator)

CoordinatorLayout myCoordinator;

private BottomBar mBottomBar;

private List fragmentList;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

initViewPager();

createBottomBar(savedInstanceState);

}

private void createBottomBar(Bundle savedInstanceState) {

mBottomBar = BottomBar.attachShy(myCoordinator,viewPager, savedInstanceState);

mBottomBar.setItemsFromMenu(R.menu.bottombar_menu, new OnMenuTabClickListener() {

@Override

public void onMenuTabSelected(@IdRes int menuItemId) {

switch (menuItemId) {

case R.id.bb_menu_recents:

viewPager.setCurrentItem(0);

break;

case R.id.bb_menu_favorites:

viewPager.setCurrentItem(1);

break;

case R.id.bb_menu_nearby:

break;

case R.id.bb_menu_friends:

break;

case R.id.bb_menu_food:

break;

}

}

@Override

public void onMenuTabReSelected(@IdRes int menuItemId) {

}

});

// Setting colors for different tabs when there's more than three of them.

// You can set colors for tabs in three different ways as shown below.

mBottomBar.mapColorForTab(0, ContextCompat.getColor(this, R.color.colorAccent));

mBottomBar.mapColorForTab(1, 0xFF5D4037);

mBottomBar.mapColorForTab(2, "#7B1FA2");

mBottomBar.mapColorForTab(3, "#FF5252");

mBottomBar.mapColorForTab(4, "#FF9800");

}

@Override

public void onSaveInstanceState(Bundle outState) {

super.onSaveInstanceState(outState);

// Necessary to restore the BottomBar's state, otherwise we would

// lose the current tab on orientation change.

mBottomBar.onSaveInstanceState(outState);

}

private void initViewPager() {

fragmentList = new ArrayList<>();

fragmentList.add(new FragmentOne());

fragmentList.add(new FragmentTwo());

viewPager.setAdapter(new FragmentStatePagerAdapter(getSupportFragmentManager()) {

@Override

public Fragment getItem(int position) {

return fragmentList.get(position);

}

@Override

public int getCount() {

return fragmentList.size();

}

});

viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {

@Override

public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

}

@Override

public void onPageSelected(int position) {

mBottomBar.selectTabAtPosition(position, true);

}

@Override

public void onPageScrollStateChanged(int state) {

}

});

}

}

BottomBar的github上提供了两种初始化方式,这里是第二种实现下滑隐藏,因为是fragment滚动所以fragment的布局要被NestedScrollView包裹(下面贴代码,很简单的),同时注意viewPager.setOnPageChangeListener已经过时了。

layout/activity_main.xml

android:id="@+id/myCoordinator"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:fitsSystemWindows="true"

tools:context="com.example.bottombar.bottombar.MainActivity">

android:id="@+id/viewPager"

android:layout_width="match_parent"

android:layout_height="match_parent"/>

FragmentOne.Java

public class FragmentOne extends Fragment {

View v;

Context context;

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

v = inflater.inflate(R.layout.fragment_one, container,false);

context = getActivity();

return v;

}

}

layout/fragment_one.xml

android:id="@+id/myScrollView"

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

>

android:layout_width="match_parent"

android:layout_height="match_parent"

android:padding="20dp">

android:layout_centerInParent="true"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="@string/baiduInfo"/>

以上所述是小编给大家介绍的Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

Android studio实现底部导航,Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果...相关推荐

  1. android studio输入框下划线,Android开发之TextView的下划线添加

    Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...

  2. Android点击无响应,Android Studio无响应打不开的解决办法

    最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...

  3. android studio怎么添加按钮,Android Studio 工具栏添加常用按钮

    本文中 Android Studio 的版本为 android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异. 在工具栏中添加一些常用的按钮,如设置.DDMS,有利 ...

  4. Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  5. android studio 测试工具,使用Android Studio进行单元测试

    Android Studio已经到了1.2版本,国内的开发者基本也在从Eclipse向Android Studio进行转变,对于Android开发者,以后必将是Android Studio的天下. 昨 ...

  6. Android Studio(3)---Android Studio的配置

    Android Studio配置 Android Studio 提供诸多向导和模板,可用于验证系统要求(例如 Java 开发工具包 (JDK) 和可用内存)和配置默认设置(例如优化的默认 Androi ...

  7. android在java下建立模块,Android Studio:如何在Android模块中包含Java模块?

    在Android工作室我有一个Android模块,我们称之为MyAndroid.我还有一个Java模块(不是独立的JAR,而是模块中的完整Java项目),我们称之为MyJava.Android Stu ...

  8. Android Studio(五):修改Android Studio项目包名

    Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...

  9. Android Studio安装以及Fetching android sdk component information超时的解决方案

    Android Studio安装以及Fetching android sdk component information超时的解决方案 参考文章: (1)Android Studio安装以及Fetch ...

最新文章

  1. 模块可测性设计之无损插桩
  2. lt;备份gt;10.9Sed and 计划任务
  3. php 崩溃 输出,php – 创建可崩溃的print_r()var_dump()的函数?
  4. linux 下nc-verilog 仿真环境搭建,Cadence NC Verilog仿真教程
  5. poj 3243 Clever Y(Baby-Step Giant-Step)
  6. PSPICE仿真数据转MATLAB
  7. 详解TCP数据包中SYN,ACK字段与数据发送的关联
  8. 嵌入式开发中三种操作系统的分析与比较
  9. 文本识别之MASTER
  10. node 文字生成图片
  11. 线性代数笔记10——矩阵的LU分解
  12. Windows 文件系统过滤驱动开发教程 (第二版)
  13. 【每日一个GitHub项目】GitHub中文排行榜
  14. 极具职场竞争力的操作系统背景知识学习笔记(Windows+Linux)
  15. JVM调优总结--压力测试
  16. HTML做跳转另一个页面链接,html中如何链接到另一个页面
  17. IAR Embedded Workbench 破解方法+工具+授权文件
  18. Blueprint could not be loaded because it derives from an invalid class.
  19. mvbox播放器关联呱呱K歌伴侣
  20. 【Linux学习】基础IO

热门文章

  1. CSS基础(part11)--盒子模型之内边距
  2. 《娱乐至死》读书笔记(part4)--只有给观众他们想要的东西,你才可以得到市场占有率
  3. 嵩天-Python语言程序设计程序题--第七周:文件和数据格式化
  4. 什么是常驻内存式的开发模式?_“直播+”模式下的直播系统开发需要注意什么问题?...
  5. windows7 32升级64位 硬盘安装_LabVIEW 2018(32/64)位 软件安装教程
  6. 云原生应用程序运行时 Kyma 简介
  7. 使用 RxJs Observable 来避免 Angular 应用中的 Promise 使用
  8. Hybris DDIC type and its counterpart model class
  9. 在SAP Business Application Studio里创建Fiori应用的操作流程
  10. SAP Fiori 1.0和2.0的区别