[Android Studio]Bottom Navigation View


下部メニューを選択して別の分割を区切る例


1.Bottom Navigation Viewの項目の定義


下端に4つの項目があることを示しています.
  • Smenu.xml
  • <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto">
        <item
            android:id="@+id/tab1"
            app:showAsAction="always"
            android:enabled="true"
            android:icon="@drawable/home"
            android:title="Home"/>
        <item
            android:id="@+id/tab2"
            app:showAsAction="always"
            android:enabled="true"
            android:icon="@drawable/monitoring"
            android:title="Monitoring"/>
        <item
            android:id="@+id/tab3"
            app:showAsAction="always"
            android:enabled="true"
            android:icon="@drawable/gallery"
            android:title="Gallery"/>
        <item
            android:id="@+id/tab4"
            app:showAsAction="always"
            android:enabled="true"
            android:icon="@drawable/setting"
            android:title="Setting"/>
    
    </menu>
  • android: id = "@+id/tab1"
    メニューごとに名前を指定します.後でidを使います.
  • app : showAsAction = "always"
    ドロップダウンメニューは常に表示されます.この値によっては、見えない場合があるかもしれません.

  • android: enabled = "true"
    システムがサービスをインスタンス化できるかどうか.インスタンス化可能は「true」であり、「false」にインスタンス化できません.既定値はtrueです.

  • android : icon = "@drawable/home"
    ドロップダウン・メニューにテキスト付きアイコンを表示するときに使用するコードです.drawableドロップダウン・メニューに画像を保存し、次のコードを記述します.

  • android : title = "Home"
    ドロップダウン・メニューに表示されるテキストを表すコード.
  • 2.分割の作成


    4つの分割が生成された.分割を生成する場合は,アクティビティ生成と同じ手順で生成すればよい.分割を生成するとjavaファイルとxmlファイルが生成されます.
    次の分割が生成されます.
  • HomeFragment
  • Monitoring
  • Gallery
  • Setting
  • 3.パーティションをアップグレードするMainActivityの定義

  • activity_main.xml
  • <?xml version="1.0" encoding="utf-8"?>
    <androidx.coordinatorlayout.widget.CoordinatorLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:orientation="vertical">
    
    
    
    	<!--FrameLayout-->
        <FrameLayout
            android:id="@+id/main_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="?attr/actionBarSize"/>
    
        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottomNavigationView"
            android:layout_marginEnd="0dp"
            android:layout_marginStart="0dp"
            android:layout_gravity="bottom"
            android:background="#ffffff"
            app:menu="@menu/smenu"
            app:labelVisibilityMode="labeled"
            app:itemIconTint="@color/selectedcolor"
            app:itemTextColor="@color/selectedcolor"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
    
    </androidx.coordinatorlayout.widget.CoordinatorLayout>
  • android:layout_marginBottom="?attr/actionBarSize"/>
    下部メニューバーを生成するには、FrameLayoutに次のコードを追加する必要があります.
  • app:menu="@menu/smenu"
    以前制作したsmunuを接続します.

  • app:itemIconTint="@color/selectedcolor"
    app:itemTextColor="@color/selectedcolor"
    メニューのテキストとアイコンの色を指定します.指定したい場合は、colorディレクトリにファイルを作成して指定できます.
    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <!--색상이 선택되었을 때 -->
        <item android:state_checked="true" android:color="#7EC341"/>
      <!--평소 색상 -->
        <item android:color="#858585"/>
    </selector>

  • MainActivity.java
  • 
    public class MainActivity extends AppCompatActivity {
    
    	//BottomNavigationView 선언
        BottomNavigationView bottomNavigationView;
        //Fragment 선언
        HomeFragment homeFragment;
        MonitoringFragment monitoringFragment;
        GalleryFragment galleryFragment;
        SettingFragment settingFragment;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    
            //초기 세팅
            init();
    
    
            //bottomNavigation의 아이콘을 선택했을 때 원하는 프레그먼트가 띄어질 수 있도록 리스너를 추가한다.
            bottomNavigationView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    
    				
                    switch (item.getItemId()) {
                        case R.id.tab1: {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.main_layout, new HomeFragment())
                                    .commit();
                            return true;
                        }
                        case R.id.tab2: {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.main_layout, new MonitoringFragment())
                                    .commit();
                            return true;
                        }
                        case R.id.tab3: {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.main_layout, new GalleryFragment())
                                    .commit();
                            return true;
                        }
                        case R.id.tab4: {
                            getSupportFragmentManager().beginTransaction()
                                    .replace(R.id.main_layout, new SettingFragment())
                                    .commit();
                            return true;
                        }
    
                    }
                    return false;
                }
            });
        }
    
        private void init(){
            //fragment 객체 생성
            homeFragment = new HomeFragment();
            monitoringFragment = new MonitoringFragment();
            galleryFragment = new GalleryFragment();
            settingFragment = new SettingFragment();
    
            //main.xml상의 bottomNavigationView 연결
            bottomNavigationView = findViewById(R.id.bottomNavigationView);
    
            //제일 처음 띄어줄 뷰 세팅
            getSupportFragmentManager().beginTransaction().replace(R.id.main_layout,homeFragment).commitAllowingStateLoss();
    
        }
    }
  • bottomNavigationビューでtab 1に対応するクリックが行われた場合、main layoutはhomeFranceを表示します.
  • 以前のプロジェクトでは、各プロジェクトにアイコンとテキストがあり、ドロップダウンバーを作成し、Activityに接続し、重くて緩やかな感じがし、Android Studioが提供するBottom Navigation Viewを使用すると、簡単で実現しやすい.