본문 바로가기
Android/Kotlin App

[Kotlin App] 메뉴 - 옵션메뉴, 컨텍스트 메뉴

by 태옹 2021. 4. 16.

메뉴

옵션 메뉴

키패드의 메뉴 버튼 또는 화면 오른쪽 위의 메뉴 아이콘을 눌렀을 때 화면 하단에 나오는 메뉴

화면이 넘어갈 정도로 목록이 많으면 스크롤해서 선택 가능함

 

옵션 메뉴에서 XML파일을 이용하는 방식

1. 메뉴 폴더 생성 및 메뉴 XML파일 생성·편집 -> 메뉴 코딩

2. Kotlin코딩 : onCreateOptionMenu() 메소드 오버라이딩 -> 메뉴 파일 등록

3. Kotlin코딩 : onOptionsItemSelected() 메소드 오버라이딩 ->메뉴 선택 시 동작할 내용 코딩

 

 

 

 

컨텍스트 메뉴

위젯 등을 롱클릭하면 나오는 메뉴

 

컨텍스트 메뉴에서 XML파일을 이용하는 방식

1. 메뉴 폴더 생성 및 메뉴 XML파일 생성·편집 -> 메뉴 코딩

2. Kotlin코딩 : onCreate() 안에 registerForContextMenu()로 등록 -> 메뉴를 사용할 위젯 등록

3. Kotlin코딩 : onCreateContextMenu() 메소드 오버라이딩 -> 메뉴파일 등록

4. Kotlin코딩 : onContextItemSelected() 메소드 오버라이딩 -> 메뉴 선택 시 동작할 내용 코딩

 

 

 


0. 메뉴 생성 전 준비단계

 

 폴더와 파일 생성하는 방법

더보기

1. menu폴더 생성

 

 

 

2. 메뉴 폴더 안에 메뉴화면으로 쓸 xml파일 생성

 

 

해당 탭 누르면 xml파일의 이름을 지정하고 생성하면 완료

▶ 필요한 메소드의 override할 코드를 가져오기

더보기

커서를 onCreat() 밖에 두고 아래 과정을 실행

이런식으로 오버라이딩 해야할 코드를 간편하게 가져올 수 있음

 

 

xml파일은 옵션이나 컨텍스트나 똑같음!

코딩 방식이 다를뿐..

 

# menu1.xml

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

    <item android:title="배경색(빨강)"
        android:id="@+id/itemRed"/>
    <item android:title="배경색(빨강)"
        android:id="@+id/itemGreen" />
    <item android:title="배경색(빨강)"
        android:id="@+id/itemBlue"/>
    <item android:title="버튼변경" >
        <menu >
            <item android:title="버튼 45도 회전"
                android:id="@+id/subRotate"/>
            <item android:title="버튼 2배 확대"
                android:id="@+id/subSize"/>
        </menu>
    </item>
</menu>

 

 


 

1. 옵션 메뉴 만들기

 

 

1. 옵션 메뉴 화면에 붙이기

onCreateOptionsMenu메소드 사용

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
	super.onCreateOptionsMenu(menu)	//꼭 기존에 써있는 return을 지워주기! 안그러면 메뉴 안보임
	var mInflator = menuInflater
	mInflator.inflate(R.menu.menu1,menu)
	return true
}

 

 

2. 옵션 메뉴 기능 구현하기

onOptionsItemSelected메소드 사용

override fun onOptionsItemSelected(item: MenuItem): Boolean {
	//return super.onOptionsItemSelected(item)
	when(item.itemId){
		R.id.itemRed -> {
			baseLayout.setBackgroundColor(Color.RED)
			return true
		}
		R.id.itemGreen -> {
			baseLayout.setBackgroundColor(Color.GREEN)
			return true
		}
		R.id.itemBlue -> {
			baseLayout.setBackgroundColor(Color.BLUE)
			return true
		}
		R.id.subRotate -> {
			button.rotation = 45f
			return true
		}
		R.id.subSize -> {
			button.scaleX = 2f
			button.scaleY = 2f
			return true
		}
	}
}

 

 


 

2. 컨텍스트 메뉴 만들기

 

1. 컨텍스트 메뉴 등록하기

onCreate()메소드 안에 적어줌

registerForContextMenu메소드 사용

registerForContextMenu(button)

 

2. 컨텍스트 메뉴 화면에 붙이기

onCreateContextMenu메소드 사용

    //메뉴만들기 - 컨텍스트 메뉴
    override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
        super.onCreateContextMenu(menu, v, menuInfo)

        var mInflator = this.menuInflater
        if(v===button){
            menu!!.setHeaderTitle("배경색 변경")
            mInflator.inflate(R.menu.menu2,menu)
        }
        if(v===button2){
            menu!!.setHeaderTitle("크기/회전")
            mInflator.inflate(R.menu.menu3,menu)
        }
    }

 

 

3. 컨텍스트 메뉴 기능 구현하기

onContextItemSelected메소드 사용

	var i:Float=45f
	var j:Float = 2f    
    //메뉴기능 - 컨텍스트 메뉴
    override fun onContextItemSelected(item: MenuItem): Boolean {
        when(item.itemId){
            R.id.subRotate->{
                imageView.rotation = i
                i+=45
                return true
            }
            R.id.subSize->{
                imageView.scaleX = j
                imageView.scaleY = j
                j++
                return true
            }
            R.id.btnRed->{
                baseLayout.setBackgroundColor(Color.RED)
                return true
            }
            R.id.btnGreen->{
                baseLayout.setBackgroundColor(Color.GREEN)
                return true
            }
            R.id.btnBlue->{
            baseLayout.setBackgroundColor(Color.BLUE)
            return true
            }
        }
        return false
    }

 

댓글