1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Androidで簡易コーポレートサイト(アプリ)を作成する #1 -タブバー編-

Last updated at Posted at 2023-03-13

概要

簡易コーポレイトサイトアプリをAndroidで作成していきます。
まず、Tabナビゲーションを作成します。

プロジェクト作成

Android Studioを立ち上げて[New Project]をクリックしてプロジェクトを作成します。
[Empty Activity]を選択して[Next]をクリックします。
000001.jpg
Nameを好きなものに変更(AndroidWebsiteとしました)して、LanguageがKotlinとなっていることを確認して[完了]をクリックします(保存場所はお好みで)。Minimum SDKバージョンは何%のデバイスで動作するか、許容できる範囲の最新バージョンを確認して選びます。今回は「API 28:Android 9.0(Pie)」を選択しました。
000010.jpg

参考(2022年10月22日時点)
000020.jpg

すこしするとプロジェクトが立ち上がります。

確認

右上の「▶」をクリックするとエミュレータが立ち上がり現状を確認できます。
000030.jpg
000040.jpg

確認できたら「■」をおして一旦停止して、エミュレータをとじます。

Tab作成

ファイル確認

まず、AndroidStudioを確認すると、中央にファイルが2つすでに開かれている状態であります。
000050.jpg

それぞれ

  • MainActivity.kt
    アプリのエントリポイントで、ユーザーから見えない機能部分を実装するファイル
  • activity_main.xml
    レイアウトを定義する XML ファイル

となっています。主に追加していくファイルとこの2つのファイルを編集していきます。

デフォルトレイアウト削除

activity_main.xmlを開いて、デフォルトのレイアウト消してみます。
上部でactivity_main.xmlを選択するとファイルの中身が表示されます。
AndroidStudioで編集する際に表示するレイアウトを「Split」にしておくと、Codeをデザインも確認できるので「Split」にしておきます。000060.jpg

右側のデザインから「Hello World」を選択してDeleteキーで削除します。
000070.jpg

するとコード上からもTextViewが消えてデフォルトのTextViewを消すことができました。
000080.jpg

BottomNavigationView追加

paletteの検索窓に「BottomNavigationView」と入力してBottomNavigationViewを見つけ、デザインにドラックアンドドロップします。
000090.jpg

すると、コードにも追加されました。
000100.jpg

BottomNavigationViewが選択されている状態で右側のAttributesを開きLayoutで下・左・右のレイアウトの調整をします。
上下左右に「+」が表示されていますが、下・左・右の「+」をクリックして「0」を設定します。
(下に表示したいので下の余白は0、左右も0にします。)
000110.jpg

次に、Layout_widthとLaout_heightをコードから編集します。(AttributeからでもOK)
widthは横幅いっぱいにしたいのでmatch_parent、heightはコンテンツ(メニュー)の高さに合わせるようにします。

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <com.google.android.material.bottomnavigation.BottomNavigationView
+       android:layout_width="match_parent"
+       android:layout_height="wrap_content"
-       android:layout_width="xxxdp"
-       android:layout_height="xxxdp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
コピペ用
<com.google.android.material.bottomnavigation.BottomNavigationView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

するとレイアウトもシュッと下の方に設定されたのがわかります。
000120.jp

Navigation作成

左側の「ResourceManager」を開いて「Navigation」を選択します。
000130.jpg
「+」から「Navigation Resouce File」をクリックします。
000140.jpg

「my_nav」という名前を指定して「OK」をクリックします。
000150.jpg

注意が表示されますが、「OK」をクリックします。
000160.jpg

Navigationの行き先(HomeとContact)作成

行き先を作成していきます。
中央上部の「+」をクリックします。
000170.jpg

「Create New Destination」をクリックします。
000180.jpg

Fragment(Blank)を選択してNextをクリックします。
000190.jpgこちらをTop画面用にしたいので「TopFragment」という名前に指定して「Finish」をクリックします。
000200.jpg

同様の手順で「ContactFragment」も作成します。
000210.jpg

するとこんな感じの画面になっているはずです。
000230.jpg

activity_main.xml編集

いま作成したFragmentを表示するようにactivity_main.xmlを開いて「NavHostFragment」を追加します。
「NavHostFragment」を検索し、ドラッグアンドドロップします。
000240.jpg

ダイアログが出たら、作成した「my_nav」を選択して「OK」をクリックします。
000250.jpg

Layoutから上下左右のレイアウトを「+」をクリックして調整(すべて0に)します。
またandroid:layout_widthに値が入っていますが、android:layout_width="match_parent"に変更します。
000260.jpg

Menu作成

ナビゲーションを表示するメニューを作成します。
左側の「ResourceManager」を開いて「Menu」を選択します。
000270.jpg

「+」から「Menu Resouce File」をクリックします。
000280.jpg

「bottom_menu」という名前で作成します。
000290.jpg

paletteから「MenuItem」を選択してドラッグ・アンド・ドロップします。
000300.jpg

これを2回繰り返し、デザインに2つItemというmenuができればOKです。
000310.jpg

アイコン追加

アイコンでHOME用の家のアイコンとContact用のメールのアイコンをDrawbleに追加していきます。
左側から「Drawble」を選択します。
000320.jpg

「+」ボタンで「Vector Asset」をクリックします。
000330.jpg
ダイアログのClip Artをクリックします。
000340.jpg
検索窓に「Home」と入力してアイコンを探します。選択したら「OK」をします。
000350.jpg
アイコンが表示されているのを確認し、Nameを「home」に変更して手順にそってすすめて登録します。(名前は変更しなくてもいいのですが、コード追加が手間でなくわかりやすいように変更しました)
000360.jpg
000370.jpg

同様の手順でメールアイコン(emailと検索)も追加します。名前は「email」に変更します。左側に追加されたのを確認します。
000380.jpg

アイコン設定

Projectに戻って、bottom_menu.xmlを開きます(res>menu>bottom_menu.xml)。「split」で表示させて、コードを編集します。
000390.jpg

android:iconで追加したアイコンを指定し、android:titleも変更します。また、それぞれFragmentとリンクさせるためandroid:idでFragmentのIDを指定します。

bottom_menu.xml
    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">

-       <item android:title="Item" />
-       <item android:title="Item" />
+       <item android:id="@+id/topFragment" android:title="Top" android:icon="@drawable/home" />
+       <item android:id="@+id/contactFragment" android:title="Contact" android:icon="@drawable/email" />
    </menu>
コピペ用
<item android:id="@+id/topFragment" android:title="Top" android:icon="@drawable/home" />
<item android:id="@+id/contactFragment" android:title="Contact" android:icon="@drawable/email" />

FragmentのIDはmy_nav.xml(res>navigation>my_nav.xml)から確認できます。
000400.jpg

activity_main.xml編集

activity_main.xmlに戻って、bottomNavigationViewにapp:menuを追加します。

activity_main.xml
	<?xml version="1.0" encoding="utf-8"?>
	<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:layout_width="match_parent"
	    android:layout_height="match_parent"
	    tools:context=".MainActivity">

	    <com.google.android.material.bottomnavigation.BottomNavigationView
	        android:id="@+id/bottomNavigationView"
	        android:layout_width="match_parent"
	        android:layout_height="wrap_content"
	        app:layout_constraintBottom_toBottomOf="parent"
	        app:layout_constraintEnd_toEndOf="parent"
	        app:layout_constraintStart_toStartOf="parent" 
-	        />
+	        app:menu="@menu/bottom_menu" />

	    <androidx.fragment.app.FragmentContainerView
	        android:id="@+id/fragmentContainerView"
	        android:name="androidx.navigation.fragment.NavHostFragment"
	        android:layout_width="0dp"
	        android:layout_height="0dp"
	        app:defaultNavHost="true"
	        app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
	        app:layout_constraintEnd_toEndOf="parent"
	        app:layout_constraintStart_toStartOf="parent"
	        app:layout_constraintTop_toTopOf="parent"
	        app:navGraph="@navigation/my_nav" />
	</androidx.constraintlayout.widget.ConstraintLayout>
000410.jpg

レイアウト上はtabメニューが設置されました。

プログラム追加

レイアウト上はtabメニューが設置されましたがプログラムを記述していないため、エミュレータで動かしても、画面が遷移することはありません。
プログラムを追加します。
findByIdとfindFragmentByIdでbottomNavigationViewとfragmentContainerViewを取得して、setupWithNavControllerで設定します。

MainActivity.kt
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

+           val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
+           val navController = supportFragmentManager.findFragmentById(R.id.fragmentContainerView)

+           bottomNavigationView.setupWithNavController(navController!!.findNavController())
        }
    }
コピペ用
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
val navController = supportFragmentManager.findFragmentById(R.id.fragmentContainerView)

bottomNavigationView.setupWithNavController(navController!!.findNavController())

上記コードをコピペすると、文字が赤くなる部分があります。赤い文字にカーソルを合わせるとUnresolved referenceと表示されています。「Import」をクリックして利用できるように設定します。

000420.jpg 000430.jpg 000440.jpg

すると、上部のImportにコードが追加され、赤文字のエラーが消えます。
000450.jpg

この状態でエミュレータを起動して確認するとTopとContactのアイコンをクリックするごとに画面遷移しています(表示がないのでよくわかりません)が、ヘッダ部分の表示に変更がないのでこちらも変えます。

MainActivity.kt
    package com.example.simpleweb

    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import androidx.navigation.fragment.findNavController
    import androidx.navigation.ui.AppBarConfiguration
    import androidx.navigation.ui.setupActionBarWithNavController
    import androidx.navigation.ui.setupWithNavController
    import com.google.android.material.bottomnavigation.BottomNavigationView

    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)

            val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigationView)
            val navController = supportFragmentManager.findFragmentById(R.id.fragmentContainerView)

+           val appBarConfiguration = AppBarConfiguration(setOf(R.id.homeFragment,R.id.contactFragment))
+           setupActionBarWithNavController(navController!!.findNavController(),appBarConfiguration)
            
            bottomNavigationView.setupWithNavController(navController!!.findNavController())
        }
    }
コピペ用
val appBarConfiguration = AppBarConfiguration(setOf(R.id.topFragment,R.id.contactFragment))
setupActionBarWithNavController(navController!!.findNavController(),appBarConfiguration)

こちらも同様に赤文字をImportをして追加してください。
エミュレータを立ち上げてみるとタイトルがfragment_topとfragment_contactで切り替わっているのがわかります。
000460.jpg

タイトルをTopとContactに変更します。
my_nav.xmlを開いて、コードを変更します。

my_nav.xml
    <?xml version="1.0" encoding="utf-8"?>
    <navigation 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/my_nav"
        app:startDestination="@id/homeFragment">

        <fragment
            android:id="@+id/homeFragment"
            android:name="com.example.simpleweb.HomeFragment"
-           android:label="fragment_top"
+           android:label="Top"
            tools:layout="@layout/fragment_home" />
        <fragment
            android:id="@+id/contactFragment"
            android:name="com.example.simpleweb.ContactFragment"
-           android:label="fragment_contact"
+           android:label="Contact"
            tools:layout="@layout/fragment_contact" />
    </navigation>

エミュレータで変更されたことが確認できます。
000470.jpg
000480.jpg
これでTabの完成です。

関連コンテンツ

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?