最近、独自でAndroid のアプリのコードを書いているので、それのメモ書きとして書いています。
「BottomNavigationView」とは?
下記画像の、赤枠の部分がそれです。
今回の記事の題名には「Java」と書いてありますが、実装方法自体は「xml」で実装します。
実装
ソースコードは下記の通りです。
(各ソースの配置位置は、Andoid Studioでプロジェクトを生成した基本的な構造を想定しています。)
<?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」に表示されるメニューは、下記で設定しています。
<?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 上での配置は、下記のようになっています。
android:icon
でデザインを設定していますが、設定しているデザインは「Google Fonts」のサイトで.xmlファイルをダウンロードしてきて、「\res\drawable\」下に格納しています。
「Google Fonts」のURLは下記の通りです。
https://fonts.google.com/icons
欲しいアイコンの「Android」を指定して「Download」することで、.xmlファイルが含まれる.zipファイルがダウンロードできます。
BottomNavigationViewのイベント処理
ここでやっと、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
に含まれるitem
のid
を使用して、switch()
文で処理を分岐します。
終わりに
今回は、BottomNavigationView
に関して、ということで記事を書きましたが、これ自体は他の方が書かれた記事もあるので、特に珍しくないかと思います。(JavaではなくKotlinということもありましたが)
今作成しているアプリに関係して、また書くことがあれば、その都度書いていこうかと思います。
また、作成中のアプリが完成したら、作成したアプリについての記事も書こうかと思います。
(途中で面倒くさくなって、放置しなければですが(笑))