Kotlin에서 Navigation Drawer를 봤어요.

환경 확인


이 글의 내용은 다음과 같은 환경에서 검증되었다.
* Java:open jdk 1.8.0_152
* Kotlin 1.2.10
* Android Studio 3.0.2
* CompileSdkVersion:26

입문


지금까지 우리는 Kotlin에 최소한의 Navigation Drawer를 설치했다.
정말 필요한 최소한이어서 햄버거 등을 설치하지 않았다.

응용 프로그램의 전체 모습


다음 그림의 응용 프로그램을 만들었습니다.

구현 단계


응용 프로그램을 만들기 위해 다음 순서에 따라 설치했다.
1. build.APP 모듈
2. 문자열 정의
3. 한 줄의 배치
4. 화면 레이아웃 파일
5.ListView 행이 클릭되었을 때 처리

구현 내용 설명


1.build.APP 모듈


NavigationDrawer는 Suppert v4에 포함되어 있기 때문에gradle에 다음과 같은 내용을 추가했습니다.
build.gradle
dependencies {
    implementation 'com.android.support:support-v4:26.1.0'
}

2. 문자열 정의


문자열 자원에 메뉴로 표시할 문자열 그룹을 정의합니다.
strings.xml
<resources>
    <string name="app_name">NavigationDrawerKotlin</string>

    <string-array name="menu_string_array">
        <item></item>
        <item></item>
        <item></item>
    </string-array>
</resources>

3. 한 줄의 배치


메뉴가 ListView에서 구현되므로 레이아웃 파일 행이 생성됩니다.
list_row.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="match_parent"
    android:textSize="30sp">
</TextView>

4. 화면 레이아웃 파일


화면의 배치 요점은 다음과 같다.
  • 루트 보기는 "android.support.v4.widget.DrawerLayout"이어야 합니다
  • 루트 보기에서 id를 지정합니다
  • 첫 번째 창은 주요 내용이다
  • 두 번째 보기는 NavigationDrawer에 표시되는 부분입니다
  • 두 번째 보기에서 "android:layout_gravity"속성을 지정합니다
  • activity_main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="jp.co.casareal.navigationdrawerkotlin.MainActivity">
    
        <LinearLayout
            android:id="@+id/content_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
    
            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="ここで内容を表示する"
                android:textSize="30sp" />
        </LinearLayout>
    
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="start">
    
            <ListView
                android:id="@+id/navigation_menu_list"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@android:color/white" />
        </LinearLayout>
    
    
    </android.support.v4.widget.DrawerLayout>
    
    

    5.ListView 행이 클릭되었을 때 처리


    메뉴는 ListView에서 이루어지기 때문에 ListView 줄이 눌렸을 때 처리됩니다.
    클릭하면 내용의 배경을 바꾸고 메뉴를 닫습니다.
    메뉴를 닫으려면 DrawerLayout의 closeDrawers 메서드를 호출합니다.
    MainActivity.kt
    package jp.co.casareal.navigationdrawerkotlin
    
    import android.graphics.Color
    import android.support.v7.app.AppCompatActivity
    import android.os.Bundle
    import android.support.v7.app.ActionBarDrawerToggle
    import android.view.View
    import android.widget.ArrayAdapter
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val strings = resources.getStringArray(R.array.menu_string_array)
            val adapter = ArrayAdapter<String>(this,R.layout.list_row,strings)
    
            navigation_menu_list.adapter=adapter
            navigation_menu_list.setOnItemClickListener { _, _, position, _ ->
                val color = when{
                    strings[position] == "赤" -> Color.RED
                    strings[position] == "青" -> Color.BLUE
                    else -> Color.YELLOW
                }
                content_layout.setBackgroundColor(color)
    
                drawer_layout.closeDrawers()
            }
        }
    }
    

    총결산


    Navigation Drawer는 햄버거를 설치하지 않으면 상당히 간결합니다.
    또한 자바에서의 구현보다 Kotlin으로 구현하는 것이 더 간결하다.

    좋은 웹페이지 즐겨찾기