Dev/Android
Android (XML 컨텍스트 메뉴, 메뉴와 대화 상자, 프로젝트)
Walker_
2024. 4. 30. 16:50
1. 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"
android:gravity="center_horizontal"
tools:context=".MainActivity">
<Button
android:id="@+id/button1"
android:text="배경색 변경"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/button2"
android:text="버튼 변경"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/itemRed"
android:title="배경색(빨강)">
</item>
<item
android:id="@+id/itemGreen"
android:title="배경색(초록)">
</item>
<item
android:id="@+id/itemBlue"
android:title="배경색(파랑)">
</item>
</menu>
- menu1.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/subRotate"
android:title="버튼 45도 회전">
</item>
<item
android:id="@+id/subSize"
android:title="사이즈 크게">
</item>
</menu>
- menu2.xml
package kr.jeongmo.a0430contextproject
import android.graphics.Color
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.ContextMenu
import android.view.MenuItem
import android.view.View
import android.widget.Button
import android.widget.LinearLayout
class MainActivity : AppCompatActivity() {
lateinit var baseLayout : LinearLayout
lateinit var button1 : Button
lateinit var button2 : Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
baseLayout = findViewById(R.id.baseLayout)
button1 = findViewById(R.id.button1)
button2 = findViewById(R.id.button2)
registerForContextMenu(button1)
registerForContextMenu(button2)
}
override fun onCreateContextMenu(
menu: ContextMenu?,
v: View?,
menuInfo: ContextMenu.ContextMenuInfo?
) {
super.onCreateContextMenu(menu, v, menuInfo)
if (v == button1) {
menu?.setHeaderTitle("배경색 변경")
menuInflater.inflate(R.menu.menu1, menu)
} else if (v == button2) {
menuInflater.inflate(R.menu.menu2, menu)
}
}
override fun onContextItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.itemRed -> {
baseLayout.setBackgroundColor(Color.RED)
}
R.id.itemGreen -> {
baseLayout.setBackgroundColor(Color.GREEN)
}
R.id.itemBlue -> {
baseLayout.setBackgroundColor(Color.BLUE)
}
R.id.subRotate -> {
button2.rotation = 45f
}
R.id.subSize -> {
button2.scaleX = 2f
}
}
return super.onContextItemSelected(item)
}
}
2. 메뉴와 대화 상자 - 대화상자
<?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"
android:gravity="center_horizontal"
tools:context=".MainActivity">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="대화상자"/>
</LinearLayout>
package kr.jeongmo.a0430talkbox
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AlertDialog
class MainActivity : AppCompatActivity() {
lateinit var button1: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button1 = findViewById(R.id.button1)
button1.setOnClickListener {
val dlg = AlertDialog.Builder(this@MainActivity)
dlg.setTitle("제목입니다.")
dlg.setMessage("이곳이 내용입니다.")
dlg.setIcon(R.mipmap.ic_launcher)
dlg.show()
}
}
}
dlg.setPositiveButton("확인",null)
- 속성 추가
- 확인 기능 추가
package kr.jeongmo.a0430talkbox
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AlertDialog
class MainActivity : AppCompatActivity() {
lateinit var button1: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button1 = findViewById(R.id.button1)
button1.setOnClickListener {
val versionArray = arrayOf("오레오", "파이", "큐(10)")
val dlg = AlertDialog.Builder(this@MainActivity)
dlg.setTitle("좋아하는 버전은?")
dlg.setIcon(R.mipmap.ic_launcher)
dlg.setSingleChoiceItems(versionArray, 0) {dialog, which ->
button1.text = versionArray[which]
}
dlg.setPositiveButton("닫기",null)
dlg.show()
}
}
}
class MainActivity : AppCompatActivity() {
lateinit var button1: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button1 = findViewById(R.id.button1)
button1.setOnClickListener {
val versionArray = arrayOf("오레오", "파이", "큐(10)")
val checkArray = booleanArrayOf(true, false, false)
val dlg = AlertDialog.Builder(this@MainActivity)
dlg.setTitle("좋아하는 버전은?")
dlg.setIcon(R.mipmap.ic_launcher)
dlg.setMultiChoiceItems(versionArray, checkArray) {dialog, which, isChecked ->
button1.text = versionArray[which]
}
dlg.setPositiveButton("닫기",null)
dlg.show()
}
}
}
3. 대화상자 - 프로젝트
<?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"
android:gravity="center_horizontal"
tools:context=".MainActivity">
<TextView
android:id="@+id/textViewName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="사용자이름"/>
<TextView
android:id="@+id/textViewEmail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이메일"/>
<Button
android:id="@+id/button"
android:text="여기를 클릭"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="사용자이름"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText1"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="이메일"
android:textSize="20dp"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/editText2"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:background="#ff0000"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_star_big_on"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/toastText1"
android:text="TextView"
android:textSize="20dp"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/btn_star_big_on"/>
</LinearLayout>
package kr.jeongmo.a0430talkproject
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.TextView
import androidx.appcompat.app.AlertDialog
class MainActivity : AppCompatActivity() {
lateinit var textViewName : TextView
lateinit var textViewEmail : TextView
lateinit var button : Button
lateinit var editText1: EditText
lateinit var editText2: EditText
lateinit var toastText1: TextView
lateinit var dialogView: View
lateinit var toastView: View
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
title = "사용자 정보 입력"
textViewName = findViewById(R.id.textViewName)
textViewEmail = findViewById(R.id.textViewEmail)
button = findViewById(R.id.button)
button.setOnClickListener {
dialogView = View.inflate(this@MainActivity, R.layout.dialog1, null)
val dialog = AlertDialog.Builder(this@MainActivity)
dialog.setTitle("사용자 정보 입력")
dialog.setIcon(R.drawable.ic_menu_allfriends)
dialog.setView(dialogView)
dialog.setPositiveButton("확인") {dlog, which ->
editText1 = dialogView.findViewById(R.id.editText1)
editText2 = dialogView.findViewById(R.id.editText2)
textViewName.text = editText1.text.toString()
textViewEmail.text = editText2.text.toString()
}
dialog.setNegativeButton("취소", null)
dialog.show()
}
}
}
button.setOnClickListener {
dialogView = View.inflate(this@MainActivity, R.layout.dialog1, null)
val dialog = AlertDialog.Builder(this@MainActivity)
dialog.setTitle("사용자 정보 입력")
dialog.setIcon(R.drawable.ic_menu_allfriends)
dialog.setView(dialogView)
dialog.setPositiveButton("확인") {dlog, which ->
editText1 = dialogView.findViewById(R.id.editText1)
editText2 = dialogView.findViewById(R.id.editText2)
textViewName.text = editText1.text.toString()
textViewEmail.text = editText2.text.toString()
}
dialog.setNegativeButton("취소", null)
dialog.show()
}
}
button.setOnClickListener {
dialogView = View.inflate(this@MainActivity, R.layout.dialog1, null)
val dialog = AlertDialog.Builder(this@MainActivity)
dialog.setTitle("사용자 정보 입력")
dialog.setIcon(R.drawable.ic_menu_allfriends)
dialog.setView(dialogView)
dialog.setPositiveButton("확인") {dlog, which ->
editText1 = dialogView.findViewById(R.id.editText1)
editText2 = dialogView.findViewById(R.id.editText2)
textViewName.text = editText1.text.toString()
textViewEmail.text = editText2.text.toString()
}
dialog.setNegativeButton("취소") {dlog, which ->
val toast = Toast(this@MainActivity)
toastView = View.inflate(this@MainActivity, R.layout.toast1, null)
toastText1 = toastView.findViewById<TextView>(R.id.toastText1)
toastText1.text = "취소했습니다"
toast.view = toastView
toast.show()
}
dialog.show()
}
- 취소 시 위 화면 출력
공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.
부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.
읽어주셔서 감사합니다 :)