Android编程入门--BottomNavigationView+ViewPager

参考博客:Android (争取做到)最全的底部导航栏实现方法

Bottom Navigation是5.0(API level 21)新出的一种符合MD规范的导航栏规范。

规范参考:Android Bottom navigation 规范一:使用方法

3个比较火的开源库,GitHub - aurelhubert/ahbottomnavigation,GitHub - roughike/BottomBar, Ashok-Varma/BottomNavigation

ashokvarma 参考博客:Android学习之BottomNavigationBar实现Android特色底部导航栏

或参考博客:Android底部导航BottomNavigationBar

BottomNavigationView+ViewPager+Fragment布局方式

ViewPagerAdapter:

package com.zyp.energy.adapter;

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

import java.util.ArrayList;
import java.util.List;

public class ViewPagerAdapter extends FragmentPagerAdapter {

    private final List<Fragment> mFragmentList = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager manager) {
        super(manager);
    }

    @Override
    public Fragment getItem(int position) {
        return mFragmentList.get(position);
    }

    @Override
    public int getCount() {
        return mFragmentList.size();
    }

    public void addFragment(Fragment fragment) {
        mFragmentList.add(fragment);
    }

}
        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());
        adapter.addFragment(HomeFragment.newInstance());
        adapter.addFragment(NotifyFragment.newInstance());
        adapter.addFragment(SettingFragment.newInstance());
        mViewPager.setAdapter(adapter);

布局:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/activity_background"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.zyp.energy.ui.activity.MainActivity"
    tools:showIn="@layout/activity_main">

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</android.support.constraint.ConstraintLayout>
    <include layout="@layout/content_main" />

    <android.support.design.widget.BottomNavigationView
        android:id="@+id/navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"
        app:menu="@menu/navigation" />

事件代码:

    private ViewPager.OnPageChangeListener mOnPageChangeListener = new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            if (menuItem != null) {
                menuItem.setChecked(false);
            } else {
                mNavigationView.getMenu().getItem(0).setChecked(false);
            }
            menuItem = mNavigationView.getMenu().getItem(position);
            menuItem.setChecked(true);
        }

        @Override
        public void onPageScrollStateChanged(int state) {
        }
    };
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
            = new BottomNavigationView.OnNavigationItemSelectedListener() {

        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch (item.getItemId()) {
                case R.id.navigation_home:
                    mViewPager.setCurrentItem(0);
                    return true;
                case R.id.navigation_notifications:
                    mViewPager.setCurrentItem(1);
                    return true;
                case R.id.navigation_setting:
                    mViewPager.setCurrentItem(2);
                    return true;
            }
            return false;
        }

    };
时间: 2024-11-07 13:30:54

Android编程入门--BottomNavigationView+ViewPager的相关文章

Android 编程下 Using ViewPager for Screen Slides

(参考官方文档:Using ViewPager for Screen Slides | Android Developers) Android 编程下 Using ViewPager for Screen Slides,布布扣,bubuko.com

《Delphi XE6 android 编程入门教程》推荐

近5.6已经没有看见关于delphi的新技术的书出来了(看来在国内delphi的使用量确实很低了), 高勇同学最近出了一本<Delphi XE6 android 编程入门教程>,上周刚拿到,这一周大概看了一遍. 严格意义上,这本书不是按正常的出版的格式来的,大部分应该是类似博客的汇总.delphi 开发android 还是一个新事物,也就是去年才开始,相关资料也是少之甚少,这么短的的时间,能汇总出出这么高质量的资料, 先谢谢高勇同学能花这么多业余时间完成这么一项艰巨的任务. 首先,这本书主要介

[电子书] 《Android编程入门很简单》

<Android编程入门很简单>是一本与众不同的Android学习读物,是一本化繁为简,把抽象问题具体化,把复杂问题简单化的书.本书避免出现云山雾罩.晦涩难懂的讲解,代之以轻松活泼.由浅入深的剖析.这必将使得阅读本书的堵着少走弯路,快速上手,从而建立学习Android开发的信心. 链接: http://pan.baidu.com/s/1sj2xesH 密码: juab

Android编程入门--底部Dialog弹窗

参考博客:Android实现底部对话框BottomDialog dialog_bottom <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layo

Android编程入门--android.support.v7.widget.Toolbar

参考博客:利用 v7 Toolbar 自定义 Android ActionBar 布局 <?xml version="1.0" encoding="utf-8"?> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://sc

Android编程入门--简单闪屏界面

Manifest <activity android:name=".ui.activity.WelcomeActivity" android:theme="@style/SplashTheme"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android

Android编程入门--开源框架OKHttp

官网地址:http://square.github.io/okhttp/ github地址:square/okhttp 参考博客:Android okHttp网络请求之Get/Post请求 参考博客:Android okHttp网络请求之文件上传下载 session相关博客:利用okhttp框架实现包含验证码的用户登录,保持session操作 cookie相关博客:OkHttp3的基本用法 创建一个工具类 OkHttpManager 初始化方法 /** * OkHttpManager */ pu

Android编程入门--RecyclerView使用

布局 <android.support.v7.widget.RecyclerView android:id="@+id/rv_department" android:layout_width="match_parent" android:layout_height="match_parent" android:clipChildren="false" android:clipToPadding="false&q

Android编程入门--开源框架EventBus

github地址:greenrobot / EventBus 参考博客:EventBus3.0详解 参考博客: Android事件总线(一)EventBus3.0用法全解析 参考博客:Android消息传递之EventBus 3.0使用详解 先准备订阅 EventBus.getDefault().register(this); @Subscribe public void onMainEvent(MessageEvent messageEvent) { if (messageEvent.getM