1. 程式人生 > >Android BottomNavigationBar 實現底部導航欄的快捷方式

Android BottomNavigationBar 實現底部導航欄的快捷方式

Bottom navigation,為頂級檢視(top-level views)提供快速導航,可以快速的訪問和重新整理頂級檢視

本文提供很完善 底部導航 Frament 一步到位

首先就是新增依賴

//底部導航欄
compile 'com.ashokvarma.android:bottom-navigation-bar:2.0.4'

佈局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
    tools:context="jiyun_shengxiaodemo.com.myapplication.ui.activity.Main2Activity">
    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_above="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

    </FrameLayout>

    <com.ashokvarma.bottomnavigation.BottomNavigationBar
        android:id="@+id/bottom_navigation_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true">

    </com.ashokvarma.bottomnavigation.BottomNavigationBar>
</RelativeLayout>
Activity裡面就是這樣
public class MainActivity extends AppCompatActivity implements BottomNavigationBar.OnTabSelectedListener {

    @BindView(R.id.frameLayout)
    FrameLayout frameLayout;
    @BindView(R.id.bottom_navigation_bar)
    BottomNavigationBar bottomNavigationBar;
    private Fragment mFragment;//當前顯示的Fragment
    private BlankFragment blankFragment;
    private BlankFragment2 blankFragment2;
    private BlankFragment3 blankFragment3;
    private FragmentTransaction transaction;
    private FragmentTransaction fragmentTransaction;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        ButterKnife.bind(this);
        //底部導航欄
        initbottomNavigationBar();
        //bottomNavigationBar的選中事件
        bottomNavigationBar.setTabSelectedListener(this);
        //fragment聯動
        initFragment();
    }

    private void initFragment() {
        blankFragment = new BlankFragment();
        blankFragment2 = new BlankFragment2();
        blankFragment3 = new BlankFragment3();

        transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.frameLayout, blankFragment)
                .commit();
        mFragment = blankFragment;
    }

    private void initbottomNavigationBar() {
        bottomNavigationBar.setMode(BottomNavigationBar.MODE_FIXED);
        bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_STATIC);
        bottomNavigationBar
                .addItem(new BottomNavigationItem(R.drawable.a1, "故事").setInactiveIcon(ContextCompat.getDrawable(this, R.drawable.aa1)))//非選中的圖片)
                .addItem(new BottomNavigationItem(R.drawable.b1, "親子").setInactiveIcon(ContextCompat.getDrawable(this, R.drawable.bb2)))
                .setFirstSelectedPosition(0)
                .setBarBackgroundColor("#FFFFFF")//背景顏色
                .initialise();
    }

    @Override
    public void onTabSelected(int position) {
        switch (position) {
            case 0:
                switchFragment(blankFragment);
                break;
            case 1:
                switchFragment(blankFragment2);
                break;
            case 2:
                switchFragment(blankFragment3);
                break;
        }
    }

    @Override
    public void onTabUnselected(int position) {
    }

    @Override
    public void onTabReselected(int position) {
    }

    private void switchFragment(Fragment fragment) {
        //判斷當前顯示的Fragment是不是切換的Fragment
        fragmentTransaction = getSupportFragmentManager().beginTransaction();
        if (mFragment != fragment) {
            //判斷切換的Fragment是否已經新增過
            if (!fragment.isAdded()) {
                //如果沒有,則先把當前的Fragment隱藏,把切換的Fragment新增上

                fragmentTransaction.hide(mFragment)
                        .add(R.id.frameLayout, fragment).commit();
            } else {
                //如果已經新增過,則先把當前的Fragment隱藏,把切換的Fragment顯示出來
                fragmentTransaction.hide(mFragment).show(fragment).commit();
            }
            mFragment = fragment;
        }
    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {

    }
}

是不是很簡潔 哈哈

裡面沒有加入ViewPager

如果需要ViewPager

點選下面連結