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()
}

 

 

 - 취소 시 위 화면 출력

 

 


공부 과정을 정리한 것이라 내용이 부족할 수 있습니다.

부족한 내용은 추가 자료들로 보충해주시면 좋을 것 같습니다.

읽어주셔서 감사합니다 :)