標籤:lstat imp com UI 使用方法 get listener win android
參考部落格: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; } };
Android編程入門--BottomNavigationView+ViewPager