Navigation in Kotlin
Navigation in Kotlin
In this chapter we are going to learn how to create a bottom navigation application using Kotlin. Essentially, we will use the “Bottom Navigation Views Activity” template to create the skeleton of our app. We will then insert code into the scaffolding to customize the app. The important aspect of this project is to choose the Kotlin language in the wizard when creating our project.
Create a new project
Create a new project by navigating to
-
File -> New -> New Project
-
Fill in the fields on the Configure your new project screen
-
Select Bottom Navigation Activity on the “Choose your Project” screen
-
Select Language: “Kotlin” on the “Configure your Project Screen”
Create your Layout
- Insert the following code in your fragment_home.xml file.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#070707"
android:orientation="vertical">
<ImageView
android:id="@+id/imageView2"
android:layout_width="51dp"
android:layout_height="51dp"
android:layout_gravity="left"
android:layout_marginLeft="20dp"
app:srcCompat="@drawable/myflix_icon" />
<ImageView
android:id="@+id/imageView3"
android:layout_width="match_parent"
android:layout_height="139dp"
app:srcCompat="@drawable/main" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Favorites"
android:textColor="#FFFFFF"
android:textSize="24sp" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt37" />
<ImageView
android:id="@+id/imageView5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt38" />
<ImageView
android:id="@+id/imageView6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt39" />
<ImageView
android:id="@+id/imageView7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt40" />
</LinearLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/textView4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Drama"
android:textColor="#FFFFFF"
android:textSize="24sp" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="206dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt42" />
<ImageView
android:id="@+id/imageView9"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt41" />
<ImageView
android:id="@+id/imageView10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt40" />
<ImageView
android:id="@+id/imageView11"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:paddingLeft="10dp"
app:srcCompat="@drawable/tt39" />
</LinearLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Comedy"
android:textColor="#FFFFFF"
android:textSize="24sp" />
<HorizontalScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:orientation="horizontal">
<ImageView
android:id="@+id/imageView12"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/tt41" />
<ImageView
android:id="@+id/imageView13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/tt39" />
<ImageView
android:id="@+id/imageView14"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/tt38" />
<ImageView
android:id="@+id/imageView15"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
app:srcCompat="@drawable/tt42" />
</LinearLayout>
</HorizontalScrollView>
<TextView
android:id="@+id/text_gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAlignment="center"
android:textSize="20sp" />
<TextView
android:id="@+id/text_home"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:textAlignment="center"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</LinearLayout>
</ScrollView>
Create your ActivityMain.kt file
- Insert the following code into your MainActivity.kt file
package com.thebook.bottomnav
import android.os.Bundle
import com.google.android.material.bottomnavigation.BottomNavigationView
import androidx.appcompat.app.AppCompatActivity
import androidx.navigation.findNavController
import androidx.navigation.ui.AppBarConfiguration
import androidx.navigation.ui.setupActionBarWithNavController
import androidx.navigation.ui.setupWithNavController
import com.thebook.bottomnav.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navView: BottomNavigationView = binding.navView
val navController = findNavController(R.id.nav_host_fragment_activity_main)
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
}
Create your assets
- Create an Assets directory
- Inside your project, right click on app the select New -> Folder -> Assets Folder
- Click Finish on the _Configure Component screen that appears
- Create an image directory under the assets directory
- Right click on the assets directory the select New -> Directory. Then enter image as the name of the directory
- Download the image assets your project’s drawable directory. The assets for this project can be downloaded from https://github.com/budu3/the-book/tree/demo_bottom_nav_kotlin/app/src/main/res/drawable.
Run your App
The Running your Simple App chapter will walk you through the steps on how to run this example in Android Studio.
Summary
To recap, in this section we created a simple app using the Kotlin programing language. We did this by specifying that we were using Kotlin when we first created our project. By doing this Android Studio was able to create started code into which we were able to insert our custom code.