Android – 메뉴 만들기 with. 코틀린

옵션 메뉴와 컨텍스트 메뉴를 만들어 보겠습니다.

옵션 메뉴는 액션바(툴바)에 포함되는 메뉴를 의미하고,
컨텍스트 메뉴는 화면을 꾹 눌렀을 때 나타나는 메뉴를 의미합니다.

– 메뉴 만들기

메뉴 폴더를 만들기 위해 File-> new-> Android Resource Directory에 들어갑니다.

이후 위 화면과 같이 설정하면 res폴더에 main폴더가 생긴 것을 확인할 수 있습니다.

이번에는 메뉴 xml파일을 만들기 위해, file -> new -> menu resource file에 들어갑니다.

위 화면과 같이 설정하면 menu폴더에 main.xml이 생성됩니다.

– 코틀린에서 옵션 메뉴 제어하기

 override fun onCreateOptionsMenu(menu: Menu?): Boolean {
     menuInflater.inflate(R.menu.main,menu) 
     return true 
  }

안드로이드에는 onCreateOptionsMenu메소드가 옵션 메뉴를 관리합니다.
오버라이딩을 통해 메뉴를 화면에 나타낼 수 있습니다.


menuInflater객체의 inflate메소드를 통해, 메뉴 리소스를 지정합니다.
(툴바에 삽입할 메뉴xml파일을 정한다는 의미)
이후 true를 반환하면 액티비티에 메뉴가 있다고 프로그램이 인식하고 툴바에 삽입이 됩니다.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
        when(item?.itemId) {
             R.id.action_sha -> {
                // 기능 소스
                return true}
          }
         return super.onOptionsItemSelected(item)
}

onOptionsItemSelected메소드는 옵션 메뉴 안에 있는 메뉴 아이템을 관리합니다.
오버라이딩을 통해 메뉴 아이템을 마음대로 다룰 수 있습니다.

아이템을 다룰 때는 매개변수 item을 이용합니다. item은 MenuItem을 가리키는 참조변수입니다. 편하게 item객체라고 부르겠습니다.

우리는 item객체의 itemId필드를 이용해야 합니다. xml을 작성하면 메뉴 아이템에 id를 부여할 수 있다는 것을 알게 됩니다. 이 itemId필드는 사용자가 클릭한 아이템(id)을 토대로 값이 변한다고 생각하면 이해가 쉽습니다.

위 소스에서 R.id.action_sha ->{} 이 성립한다면, 사용자가 id가 action_sha인 아이템을 클릭했다고 생각합시다.

이벤트 처리가 끝나면 반환형이 boolean이니 ture를 반환합니다.

만약 when문에 해당되는게 없으면 원래 메소드를 호출하는게 정석입니다.

– 코틀린에서 컨텍스트 메뉴 제어하기

override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
        super.onCreateContextMenu(menu, v, menuInfo) 
        menuInflater.inflate(R.menu.context,menu) 
    }

onCreateContextMenu메소드는 컨텍스트 메뉴를 관리합니다.
오버라이딩을 통해 컨텍스트 메뉴를 지정할 수 있습니다.

원래 onCreateContextMenu를 호출하면 컨텍스트 메뉴를 만들 준비를 해줍니다.
이후 옵션 메뉴때와 같이 menuInflater.inflate메소드를 사용하여 사용할 컨텍스트 메뉴를 지정할 수 있습니다.

registerForContextMenu()

그리고 onCreate에서, 위 코드와 같이 컨텍스트 메뉴를 등록해주어야 합니다.
인자는 컨텍스트 메뉴와 연결할 위젯이 들어갑니다.
이 작업을 통해 위젯을 꾹 클릭하면 컨텍스트 메뉴가 나오게 됩니다.

override fun onContextItemSelected(item: MenuItem): Boolean {
        when(item?.itemId){
            R.id.action_share->{
                // 기능 소스
                return true}
        }
        return super.onOptionsItemSelected(item) 
    }

onContextItemSelected메소드는 컨텍스트 메뉴 아이템을 관리합니다.
오버라이딩을 통해 메뉴 아이템을 마음대로 다룰 수 있습니다.

그 방법은 onOptionsItemSelected와 동일합니다!

Leave a Reply

Your email address will not be published. Required fields are marked *