Android studio实现底部导航,Android 开发之BottomBar+ViewPager+Fragment实现炫酷的底部导航效果...
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实现炫酷的底部导航效果...相关推荐
- android studio输入框下划线,Android开发之TextView的下划线添加
Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...
- Android点击无响应,Android Studio无响应打不开的解决办法
最近谷歌发布了Android Studio,下载安装之后,在使用时发现一个问题,那就是发布无响应且无法启动,也就是点击Android图标的时候没有任务反应,我想说的是你需要重新配置一下环境~ 因为这个 ...
- android studio怎么添加按钮,Android Studio 工具栏添加常用按钮
本文中 Android Studio 的版本为 android Studio 2.2 ,操作系统为 Windows,如有操作不同,可能是版本差异. 在工具栏中添加一些常用的按钮,如设置.DDMS,有利 ...
- Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- android studio 测试工具,使用Android Studio进行单元测试
Android Studio已经到了1.2版本,国内的开发者基本也在从Eclipse向Android Studio进行转变,对于Android开发者,以后必将是Android Studio的天下. 昨 ...
- Android Studio(3)---Android Studio的配置
Android Studio配置 Android Studio 提供诸多向导和模板,可用于验证系统要求(例如 Java 开发工具包 (JDK) 和可用内存)和配置默认设置(例如优化的默认 Androi ...
- android在java下建立模块,Android Studio:如何在Android模块中包含Java模块?
在Android工作室我有一个Android模块,我们称之为MyAndroid.我还有一个Java模块(不是独立的JAR,而是模块中的完整Java项目),我们称之为MyJava.Android Stu ...
- Android Studio(五):修改Android Studio项目包名
Android Studio相关博客: Android Studio(一):介绍.安装.配置 Android Studio(二):快捷键设置.插件安装 Android Studio(三):设置Andr ...
- Android Studio安装以及Fetching android sdk component information超时的解决方案
Android Studio安装以及Fetching android sdk component information超时的解决方案 参考文章: (1)Android Studio安装以及Fetch ...
最新文章
- 模块可测性设计之无损插桩
- lt;备份gt;10.9Sed and 计划任务
- php 崩溃 输出,php – 创建可崩溃的print_r()var_dump()的函数?
- linux 下nc-verilog 仿真环境搭建,Cadence NC Verilog仿真教程
- poj 3243 Clever Y(Baby-Step Giant-Step)
- PSPICE仿真数据转MATLAB
- 详解TCP数据包中SYN,ACK字段与数据发送的关联
- 嵌入式开发中三种操作系统的分析与比较
- 文本识别之MASTER
- node 文字生成图片
- 线性代数笔记10——矩阵的LU分解
- Windows 文件系统过滤驱动开发教程 (第二版)
- 【每日一个GitHub项目】GitHub中文排行榜
- 极具职场竞争力的操作系统背景知识学习笔记(Windows+Linux)
- JVM调优总结--压力测试
- HTML做跳转另一个页面链接,html中如何链接到另一个页面
- IAR Embedded Workbench 破解方法+工具+授权文件
- Blueprint could not be loaded because it derives from an invalid class.
- mvbox播放器关联呱呱K歌伴侣
- 【Linux学习】基础IO
热门文章
- CSS基础(part11)--盒子模型之内边距
- 《娱乐至死》读书笔记(part4)--只有给观众他们想要的东西,你才可以得到市场占有率
- 嵩天-Python语言程序设计程序题--第七周:文件和数据格式化
- 什么是常驻内存式的开发模式?_“直播+”模式下的直播系统开发需要注意什么问题?...
- windows7 32升级64位 硬盘安装_LabVIEW 2018(32/64)位 软件安装教程
- 云原生应用程序运行时 Kyma 简介
- 使用 RxJs Observable 来避免 Angular 应用中的 Promise 使用
- Hybris DDIC type and its counterpart model class
- 在SAP Business Application Studio里创建Fiori应用的操作流程
- SAP Fiori 1.0和2.0的区别