안드로이드
안드로이드 : 목록 대화 상자
ChloeLee
2020. 10. 28. 22:20
목록 대화 상자
1개 선택: setSingleChoiceItems(문자열 배열이나 배열 ID, 초기 선택할 인덱스, DialogInterface.OnclickListener)
문자열 배열이나 배열 ID 대신에 ListAdapter(배열) 나 Cursor(데이터 베이스 select 구문 결과) 설정 가능
다중 선택 : setMultiChoiceItems(문자열 배열이나 배열 ID, 항목 개수만큼의 Boolean 배열, DialogInterface.OnClickListener)
위와 비슷한 용도로 Spinner 라는 Adapter View 를 사용할 수 있습니다.
문자열 배열 사용
values 디렉토리에 array.xml 파일을 만들고 작성
layout 파일에 만든 UI 를 코드화하기
View.inflate(Context, xml 파일의 ID, null) as 원래 자료형
ListView 와 같은 데이터를 출력하는 AdapterView 에서 하나의 행을 디자인 할 때도 이 방법을 사용합니다.
progressDialog
login.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="아이디를 입력하세요"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/id"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="비밀번호를 입력하세요"
android:id="@+id/pw"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그인"
android:id="@+id/login"/>
</LinearLayout>
arrays.xml
<?xml version="1.0" encoding="utf-8"?>
<resources></resources>
values.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="team">
<item>도로공사</item>
<item>인삼공사</item>
<item>지에스</item>
</string-array>
</resources>
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"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="진동"
android:id="@+id/btn1"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="시스템 사운드"
android:id="@+id/btn2"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="음원 재생"
android:id="@+id/btn3"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="대화 상자 출력"
android:id="@+id/btn4"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="단일 항목 선택"
android:id="@+id/btn5"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="다중 항목 선택 출력"
android:id="@+id/btn6"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="로그인"
android:id="@+id/btn7"/>
</LinearLayout>
MainActivity.kt
package kr.co.tjoeun.app1028
import android.content.Context
import android.content.DialogInterface
import android.media.MediaPlayer
import android.media.Ringtone
import android.media.RingtoneManager
import android.net.Uri
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.VibrationEffect
import android.os.Vibrator
import android.util.Log
import android.view.View
import android.widget.EditText
import android.widget.LinearLayout
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
// ID 와 비밀번호를 저장할 변수
// 사용할 때 id 를 바로 사용
var id:String = ""
//id.
// 사용할 때는 ? 나 !! 를 붙여서 사용
var pw:String? = null
//pw?.
//pw!!.
var idx = 0
var team = "도로공사"
// 안드로이드에서 다중 선택을 Boolean의 배열로 받습니다.
// 선택을 한 항목은 true 그렇지 않은 항목은 false 로 만들어서 리턴
var selectIndexes = booleanArrayOf(false, false, false)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn1.setOnClickListener(View.OnClickListener {
// 진동 객체를 생성
val vib = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
// 누가 버전 이후
if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
vib.vibrate(VibrationEffect.createOneShot(500, VibrationEffect.DEFAULT_AMPLITUDE))
} else {
vib.vibrate(1000)
}
})
btn2.setOnClickListener(View.OnClickListener {
// 시스템 사운드 재생
val notification: Uri = RingtoneManager.getDefaultUri(
RingtoneManager.TYPE_ALARM)
val ringtone = RingtoneManager.getRingtone(this, notification)
ringtone.play()
})
btn3.setOnClickListener(View.OnClickListener {
val player:MediaPlayer
= MediaPlayer.create(this, R.raw.buttoneffect)
player.start()
})
btn4.setOnClickListener(View.OnClickListener {
AlertDialog.Builder(this)
.setTitle("대화 상자")
.setMessage("대화 상자에 메시지 출력")
.setIcon(R.drawable.ic_launcher_foreground)
.setPositiveButton("토스트 출력", {dialog, whichButton ->
Toast.makeText(
this@MainActivity, "작업종료",
Toast.LENGTH_LONG).show()
})
.setNegativeButton("닫기", null)
.show()
})
btn5.setOnClickListener(View.OnClickListener {
AlertDialog.Builder(this)
.setTitle("팀을 선택하세요")
.setSingleChoiceItems(R.array.team, 0,
DialogInterface.OnClickListener({
dialog, which ->
// 선택한 인덱스를 idx에 저장
idx = which
// 선택한 팀이름을 team 에 저장
val teams = resources.getStringArray(R.array.team)
team = teams[idx]
Log.e("선택한 인덱스","${idx}")
Log.e("선택한 팀 이름:","${team}")
}))
.setNegativeButton("취소", null)
.setPositiveButton("확인", null)
.show() })
btn6.setOnClickListener(View.OnClickListener {
AlertDialog.Builder(this)
.setTitle("팀을 선택하세요")
.setMultiChoiceItems(R.array.team, selectIndexes,
DialogInterface.OnMultiChoiceClickListener {
dialog, which, isCheck ->
//dialog = 대화 상자
// which = 체크한 버튼의 인덱스
// isCheck = 체크 여부
selectIndexes[which] = isCheck})
.setNegativeButton("확인", null)
.show()
})
btn7.setOnClickListener(View.OnClickListener {
// Login.xml 파일에 디자인 한 내용 가져오기
val linear = View.inflate(
this, R.layout.login, null) as LinearLayout
AlertDialog.Builder(this)
.setTitle("로그인")
.setView(linear)
.setPositiveButton("확인", DialogInterface.OnClickListener{
dialog, which ->
// id 입력란 가져오기
// findViewById 는 자신을 포함한 뷰나 Activity가 호출해야 합니다.
val editId = linear.findViewById(R.id.id) as EditText
// pw 입력란 가져오기
val editPw = linear.findViewById(R.id.pw) as EditText
// EditText의 text 는 Editable이므로 toString 을 호출해야 문자열이 됩니다.
id = editId.text.toString()
pw = editPw.text.toString()
Toast.makeText(this, "${id}:${pw}",
Toast.LENGTH_LONG).show()
})
.setNegativeButton("취소", null)
.show()
})
}
}