티스토리 뷰
뷰에 설정할 수 있고 뷰를 길게 누르면 메뉴가 나타난다.
context menu에 필요한 함수는 아래와 같습니다.
- registerForContext - context menu를 등록하는 함수
- onCreateContextMenu - 뷰를 길게 누르면 호출되는 함수
- onContextItemSelected - 메뉴 클릭 시 발생하는 함수
XML 수정하기
activity_main의 xml을 아래와 같이 수정합니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:textAppearance="@style/TextAppearance.AppCompat.Large"/>
</LinearLayout>
menu 만들기
res > New > Android Resource File을 클릭한 후
Resource type을 menu로 설정한 후 생성을 합니다.
menu의 xml을 아래와 같이 수정해줍니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:title="1" />
<item
android:id="@+id/item2"
android:title="2" />
</menu>
코드 작성하기
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
registerForContextMenu(textView)
}
override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
super.onCreateContextMenu(menu, v, menuInfo)
when(v?.id) {
R.id.textView -> {
menu?.setHeaderTitle("메뉴")
menuInflater.inflate(R.menu.textview_menu, menu)
}
}
}
}
registerForContextMenu를 통해 context menu를 설정할 id를 넣어줍니다.
onCreateContextMenu를 통해 길게 누를 시 context menu가 보이도록 설정합니다.
실행을 하면 아래와 같습니다.
이제 메뉴를 눌렀을 때 동작하는 코드를 작성하겠습니다.
아래 코드를 추가해줍니다.
override fun onContextItemSelected(item: MenuItem): Boolean {
when(item.itemId) {
R.id.item1 -> textView.text = "1번 클릭"
R.id.item2 -> textView.text = "2번 클릭"
}
return super.onContextItemSelected(item)
}
onContextItemSelected를 통해 구현을 하였습니다.
실행 결과는 아래와 같습니다.
ListView에 Context Menu 사용하기
listview에 context menu를 사용해보겠습니다.
activity_main의 xml을 아래와 같이 수정해 줍니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="text"
android:textAppearance="@style/TextAppearance.AppCompat.Large"/>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
그리고 MainActivity에서 데이터를 넣어줍니다.
class MainActivity : AppCompatActivity() {
private val data = arrayOf("1", "2", "3", "4", "5", "6", "7")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val adapter = ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, data)
listView.adapter = adapter
}
}
실행을 하면 아래와 같이 리스트 뷰가 보입니다.
아래 코드를 통해 리스트 뷰 클릭 이벤트를 추가해줍니다.
listView.setOnItemClickListener { _, _, i, _ ->
textView.text = "${i + 1} 번째 클릭"
}
실행하면 아래와 같습니다.
listview에 쓰일 menu를 하나 만들어줍니다.
그리고 xml을 아래와 같이 수정해줍니다.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/listView_item1"
android:title="1" />
<item
android:id="@+id/listView_item2"
android:title="2" />
</menu>
onCreate와 onCreateContextMenu를 아래와 같이 수정합니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
...
registerForContextMenu(listView)
}
override fun onCreateContextMenu(menu: ContextMenu?, v: View?, menuInfo: ContextMenu.ContextMenuInfo?) {
super.onCreateContextMenu(menu, v, menuInfo)
...
R.id.listView -> {
menu?.setHeaderTitle("리스트 뷰")
menuInflater.inflate(R.menu.listview_menu, menu)
}
}
override fun onContextItemSelected(item: MenuItem): Boolean {
when(item.itemId) {
R.id.item1 -> textView.text = "1번 클릭"
R.id.item2 -> textView.text = "2번 클릭"
R.id.listView_item1 -> textView.text = "리스트 뷰 1번 클릭"
R.id.listView_item2 -> textView.text = "리스트 뷰 2번 클릭"
}
return super.onContextItemSelected(item)
}
}
실행을 하면 아래와 같이 동작을 합니다.
'알려주는 이야기 > 안드로이드' 카테고리의 다른 글
안드로이드 notification 예제 (0) | 2020.08.18 |
---|---|
안드로이드 action bar (0) | 2020.08.17 |
안드로이드 popup menu (0) | 2020.08.15 |
안드로이드 option menu (0) | 2020.08.14 |
안드로이드 스튜디오 에뮬레이터에서 localhost 접속 (0) | 2020.07.08 |