7
6

More than 1 year has passed since last update.

【Android】BottomNavigationView(画面下部のナビゲーションビュー)の実装(Java)

Last updated at Posted at 2021-11-12

最近、独自でAndroid のアプリのコードを書いているので、それのメモ書きとして書いています。

「BottomNavigationView」とは?

下記画像の、赤枠の部分がそれです。
今回の記事の題名には「Java」と書いてありますが、実装方法自体は「xml」で実装します。
ナビゲーションバー.png

実装

ソースコードは下記の通りです。
(各ソースの配置位置は、Andoid Studioでプロジェクトを生成した基本的な構造を想定しています。)

\res\layout\activity_main.xml
<?xml version="1.0" encoding="utf-8"?>

<!--ConstraintLayoutはデフォルトで指定されている大枠-->
<androidx.constraintlayout.widget.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:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">

    <!--下記が BottomNavigationView-->
    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:background="?android:attr/windowBackground"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_menu" />
        <!--app:menu="@menu/~"でbottom_menu.xmlを読み込み、表示されるメニューを設定している-->
</androidx.constraintlayout.widget.ConstraintLayout>

「BottomNavigationView」に表示されるメニューは、下記で設定しています。

\res\menu\bottom_menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item
        android:id="@+id/navigation_alarm"
        android:icon="@drawable/baseline_alarm_on_24"
        android:title="alert" />
    <item
        android:id="@+id/navigation_calendar"
        android:icon="@drawable/baseline_calendar_today_24"
        android:title="calendar" />
    <item
        android:id="@+id/navigation_memo"
        android:icon="@drawable/baseline_mode_edit_outline_24"
        android:title="memo" />
</menu>

Android Studio 上での配置は、下記のようになっています。
エクスプローラー.png

android:iconでデザインを設定していますが、設定しているデザインは「Google Fonts」のサイトで.xmlファイルをダウンロードしてきて、「\res\drawable\」下に格納しています。
「Google Fonts」のURLは下記の通りです。
https://fonts.google.com/icons
欲しいアイコンの「Android」を指定して「Download」することで、.xmlファイルが含まれる.zipファイルがダウンロードできます。
アイコン_download.png

BottomNavigationViewのイベント処理

ここでやっと、Javaの話になります。
実装方法は、下記の通りです。

\java\com\example\プロジェクト名\MainActivity.java
package com.example.プロジェクト名;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import com.google.android.material.bottomnavigation.BottomNavigationView;
import com.google.android.material.navigation.NavigationBarView;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // BottomNavigationViewのイベント設定
        setNavViewEvent()
    }

    /**
     * BottomNavigationViewのイベント設定
     */
    private void setNavViewEvent(){
        BottomNavigationView navView = findViewById(R.id.nav_view);
        navView.setOnItemSelectedListener(new NavigationBarView.OnItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                // switch()文でイベント分岐
                // item.getItemId()で、各メニューに設定した「id」を取得できる
                switch (item.getItemId()){
                    case R.id.navigation_alarm:
                        break;
                    case R.id.navigation_memo:
                        break;
                    //........................
                    default:
                        break;
                }
                return false;
            }
        });
    }
}

javaのandroidにおいての、他のイベント設定の方法と同じで、コントロールに対して、On~Listenerを設定することで、イベントを実装できます。
onNavigationItemSelected()は、NavigationBarViewの選択内容が変更されたときに発生する処理なので、NavigationBarViewに含まれるitemidを使用して、switch()文で処理を分岐します。

終わりに

今回は、BottomNavigationViewに関して、ということで記事を書きましたが、これ自体は他の方が書かれた記事もあるので、特に珍しくないかと思います。(JavaではなくKotlinということもありましたが)
今作成しているアプリに関係して、また書くことがあれば、その都度書いていこうかと思います。
また、作成中のアプリが完成したら、作成したアプリについての記事も書こうかと思います。
(途中で面倒くさくなって、放置しなければですが(笑))

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6