안 드 로 이 드 바 텀 네 비게 이 션 바 쿨 네 비게 이 션 바

구 글 은 지난 3 월 자체 출시 한 머 티 리 얼 디자인 라 이브 러 리 에 BottomNavigation Bar 내 비게 이 션 바 컨트롤 러 를 추가 했다.예전 에 이 효 과 를 실현 하려 면 방법 이 많 았 다 고 할 수 있 습 니 다. TabHost, RadioButton, textView 등 다양한 네 비게 이 션 바 를 완벽 하 게 대체 할 수 있 습 니 다.
두 블 로 그 를 참고 해 Fragment 상태 로 저 장 된 BottomNavigation Bar 를 썼 다.
전재 출처 를 밝 혀 주 십시오:http://www.open-open.com/lib/view/open1465996383855.html
전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/guolin_blog/article/details/13171191
국제관례
MODE_FIXED+BACKGROUND_STYLE_STATIC 효과
MODE_SHIFTING+BACKGROUND_STYLE_STATIC 효과
MODE_FIXED+BACKGROUND_STYLE_RIPPLE 효과
MODE_SHIFTING+BACKGROUND_STYLE_RIPPLE 효과
  • build. gradle compile 'com.ashokvarma.android:bottom-navigation-bar:1.2.0'
  • 레이아웃 내용
  • <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.wangchang.testbottomnavigationbar.MainActivity">
    
        <FrameLayout  android:id="@+id/layFrame" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" />
    
        <com.ashokvarma.bottomnavigation.BottomNavigationBar  android:id="@+id/bottom_navigation_bar" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />
    </LinearLayout>
  • 먼저 네 비게 이 션 표시 줄 의 모드 와 배경 스타일 을 설정 해 야 합 니 다
  • bottomNavigationBar.setMode(BottomNavigationBar.MODE_SHIFTING);
            bottomNavigationBar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);
  • 내 비게 이 션 표시 줄 탭 초기 화
  •         /** *          */
            BadgeItem numberBadgeItem = new BadgeItem()
                    .setBorderWidth(4)
                    .setBackgroundColor(Color.RED)
                    .setText("5")
                    .setHideOnSelect(true);
            /** *  tab    */
            bottomNavigationBar
                    .addItem(new BottomNavigationItem(R.mipmap.ic_book_white_24dp, "Books").setActiveColorResource(R.color.teal).setBadgeItem(numberBadgeItem))
                    .addItem(new BottomNavigationItem(R.mipmap.ic_music_note_white_24dp, "Music").setActiveColorResource(R.color.blue))
                    .addItem(new BottomNavigationItem(R.mipmap.ic_tv_white_24dp, "Movies & TV").setActiveColorResource(R.color.brown))
                    .addItem(new BottomNavigationItem(R.mipmap.ic_videogame_asset_white_24dp, "Games").setActiveColorResource(R.color.grey).setBadgeItem(numberBadgeItem))
                    .initialise();
            /** *                  *          ,         */
            onTabSelected(0);
            bottomNavigationBar.setTabSelectedListener(this);

    다음은 중요 한 부분 입 니 다. Fragment 상 태 를 저장 합 니 다.
     @Override
        public void onTabSelected(int position) {
            FragmentManager fm = getSupportFragmentManager();
            FragmentTransaction transaction = fm.beginTransaction();
          /** *               Fragment *              transaction.add(); *         ,  transaction.show(); *          Fragment     */
            hideFragment(transaction);
            switch (position) {
                case 0:
                    if (bookFragment == null) {
                        bookFragment = new BookFragment();
                        transaction.add(R.id.layFrame, bookFragment);
                        list.add(bookFragment);
                    } else {
                        transaction.show(bookFragment);
                    }
                    break;
                case 1:
                    if (musicFragment == null) {
                        musicFragment = new MusicFragment();
                        transaction.add(R.id.layFrame, musicFragment);
                        list.add(musicFragment);
                    } else {
                        transaction.show(musicFragment);
                    }
                    break;
                case 2:
                    if (tvFragment == null) {
                        tvFragment = new TvFragment();
                        transaction.add(R.id.layFrame, tvFragment);
                        list.add(tvFragment);
                    } else {
                        transaction.show(tvFragment);
                    }
                    break;
                case 3:
                    if (gameFragment == null) {
                        gameFragment = new GameFragment();
                        transaction.add(R.id.layFrame, gameFragment);
                        list.add(gameFragment);
                    } else {
                        transaction.show(gameFragment);
                    }
                    break;
            }
            transaction.commit();
        }

    프 래 그 먼 트 숨 기기
        /** * @param transaction */
        public void hideFragment(FragmentTransaction transaction) {
            for (Fragment fragment : list) {
                transaction.hide(fragment);
            }
        }

    조각 배치 가 간단 합 니 다.
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical">
    
        <CheckBox  android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="book" />
    </LinearLayout>

    여기에 작은 문제 가 하나 더 있 습 니 다. 5 개의 탭 을 추 가 했 을 때 Fragment 상 태 를 저장 하고 두 번 째 탭 으로 전환 할 때 문제 가 생 겨 서 정상적으로 전환 할 수 없습니다. 관심 있 는 파트너 가 시도 해 보 세 요!
    효과 도
    위의 두 편의 박문 을 종합 하여 자신 이 이 띠 상태 로 저 장 된 BottomNavigation Bar 를 쓴 것 은 여전히 멋있다 고 느 꼈 다.

    좋은 웹페이지 즐겨찾기