context_menu만들기

노지수·2022년 2월 5일
0

context_menu_main

1. xml파일 만들기

app - src - main - res - menu에 Menu리소스파일 만들기


2. 메뉴목록 만들기

// context_menu_main.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item
        android:id="@+id/text_color"
        android:title="글자색 변경"/>

    <item
            android:id="@+id/text_back_color"
            android:title="배경색 변경"/>

    <item
            android:id="@+id/text_basic"
            android:title="초기화"/>
</menu>



build.gradle(:app)

buildFeatures{
    viewBinding true
}

객체화 시키기 위한 코드작성 (오른쪽 위 sync now 꼭 눌러주기)

MainActivity

class MainActivity : AppCompatActivity() {

    val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(binding.root)

        registerForContextMenu(binding.textView)
    }

	// ContextMenu 생성
    override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
        menuInflater.inflate(R.menu.context_menu_main, menu)
    }

	// 각 메뉴 선택 시 효과
    override fun onContextItemSelected(item: MenuItem): Boolean {
        val textView = findViewById<TextView>(R.id.textView)
        when(item?.itemId){
            R.id.text_color -> { 
                textView.text = "글자색 파란색으로 변경"	// textView의 text를 변경
                textView.setTextColor(Color.BLUE)	// 글자색을 파란색으로
            }
            R.id.text_back_color -> {
                textView.text = "배경색 빨간색으로 변경"	// textView의 text를 변경
                textView.setBackgroundColor(Color.RED)	// 배경색을 빨간색으로
            }
            R.id.text_basic -> {	// 초기상태로 되돌리기
                textView.text = "contextMenu 보기"
                textView.setBackgroundColor(Color.WHITE)
                textView.setTextColor(Color.GRAY)
            }
        }
        return super.onContextItemSelected(item)
    }
}



결과

실행 시 초기화면


꾹 누르면 메뉴노출


배경색 변경 선택 시 효과

profile
프로그래밍, 개념 및 이론 기록

0개의 댓글