Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- SpringBoot
- 구글맵스
- nodejs
- React
- button
- TypeScript
- JavaScript
- JS
- 스프링부트
- Javscript
- 리액트
- TextView
- stylesheet
- Java
- 랜덤넘버
- Hook
- GoogleMaps
- 랜덤번호
- 안드로이드
- scrollview
- 오버라이딩
- Android
- Linux
- 코틀린
- 자바스크립트
- RecyclerView
- fragment
- npm
- Kotlin
- array
Archives
- Today
- Total
타닥타닥 개발자의 일상
Kotlin 코틀린으로 랜넘 넘버 맞추는 안드로이드 빙고게임 만들기 / LinearLayout 이용한 동적 버튼 만들기 / spinner 사용 본문
코딩 기록/Kotlin
Kotlin 코틀린으로 랜넘 넘버 맞추는 안드로이드 빙고게임 만들기 / LinearLayout 이용한 동적 버튼 만들기 / spinner 사용
NomadHaven 2022. 2. 12. 16:57<빙고게임 규칙>
1. 자신이 고를 숫자의 범위를 첫번째 화면에서 선택한다.
2. 프로그램이 랜덤번호를 1개 생성한다.
2.프로그램이 정한 랜덤넘버와 일치하는 번호를 누르면 bingo, 다른 번호를 누르면 safe다.
bingo걸린 사람이 커피쏘기 혹은 bingo 걸린 사람이 상금 타기 등등으로 활용할 수 있다.
파일 및 폴더 구성
com.example.binggobingo 폴더 우클릭 > 새로만들기 > Activity > Empty Activity 클릭해서 SecondActivity 생성
res > layout > item_spinner.xml 생성
res > values > array.xml 생성
스피너 생성을 위한 기본 설정
item_spinner.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tvItemSpinner"
android:layout_width="match_parent"
android:layout_height="45dp"
android:paddingTop="10dp"
android:paddingStart="30dp"
android:textColor="@android:color/black"
android:textSize="15sp"
android:paddingLeft="30dp"/>
array.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="number">
<item>0</item>
<item>1</item>
<item>2</item>
<item>3</item>
<item>4</item>
<item>5</item>
<item>6</item>
<item>7</item>
<item>8</item>
<item>9</item>
</string-array>
</resources>
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Spinner
android:id="@+id/spinner"
android:layout_width="350dp"
android:layout_height="57dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintVertical_bias="0.433"
app:layout_constraintHorizontal_bias="0.165"/>
<Button
android:id="@+id/setBtn"
android:text="SET"
android:layout_width="131dp"
android:layout_height="107dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.895"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.33"/>
<Button
android:id="@+id/startBtn"
android:text="Start"
android:layout_width="131dp"
android:layout_height="107dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.895"
app:layout_constraintTop_toBottomOf="@+id/setBtn" android:layout_marginTop="32dp"/>
<TextView
android:text="0은 기본 값이며 선택한 값이 아닙니다."
android:layout_width="342dp"
android:layout_height="35dp" android:id="@+id/textView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@+id/spinner"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.962"
app:layout_constraintHorizontal_bias="0.168"/>
</androidx.constraintlayout.widget.ConstraintLayout>
MainActivity.kt
package com.example.bingobingo
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*
import androidx.core.content.edit
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val setBtn = findViewById<Button>(R.id.setBtn)
val startBtn = findViewById<Button>(R.id.startBtn)
val spinner =findViewById<Spinner>(R.id.spinner)
setUpSpinnerNumber()
setBtn.setOnClickListener {
val pref = getSharedPreferences("pref", MODE_PRIVATE)
val editor = pref.edit()
val userNum = spinner.selectedItem.toString().toInt()
val toast = Toast.makeText(this.applicationContext, "선택값 저장", Toast.LENGTH_SHORT)
editor.putInt("number",userNum)
editor.commit()
if(userNum!=0){
toast.show()
}
}
startBtn.setOnClickListener {
val intent = Intent(this, SecondActivity::class.java)
val userNum = spinner.selectedItem.toString().toInt()
val toast = Toast.makeText(this.applicationContext, "0외의 수를 선택하시오.", Toast.LENGTH_SHORT)
if(userNum!=0){
startActivity(intent)
}
else{
toast.show()
}
}
}
fun setUpSpinnerNumber(){
val number = resources.getStringArray(R.array.number)
val adapter = ArrayAdapter(this,R.layout.item_spinner,number)
val spinner = findViewById<Spinner>(R.id.spinner)
spinner.adapter = adapter
}
fun setUpSpinnerHandler(){
val spinner = findViewById<Spinner>(R.id.spinner)
}
}
activity_second.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".SecondActivity">
<LinearLayout
android:orientation="vertical"
android:layout_width="452dp"
android:layout_height="542dp"
android:id="@+id/linearLayout" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintVertical_bias="0.193"
app:layout_constraintHorizontal_bias="0.567">
</LinearLayout>
<Button
android:text="Restart"
android:layout_width="162dp"
android:layout_height="129dp" android:id="@+id/restartBtn"
app:layout_constraintTop_toBottomOf="@+id/linearLayout"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
SecondActivity.kt
package com.example.bingobingo
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.LinearLayout
import android.widget.Toast
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
match()
var restartBtn = findViewById<Button>(R.id.restartBtn)
restartBtn.setOnClickListener {
val linerLayout = findViewById<LinearLayout>(R.id.linearLayout)
linerLayout.removeAllViews()
match()
}
}
fun match(){
val pref = getSharedPreferences("pref", MODE_PRIVATE)
var number:Int = pref.getInt("number",0)
val linearLayout = findViewById<LinearLayout>(R.id.linearLayout)
var childLayout:LinearLayout? = null
var randomNum = (Math.random() * number).toInt() + 1
var btnCount = number
for(i in 0 until btnCount){
if(i % 3 == 0) { //horizontal layout 3개 만들어서 linearlayout 한칸에 붙인다.
childLayout = LinearLayout(this)
childLayout.orientation = LinearLayout.HORIZONTAL
val layoutParams =
LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 200) //horizontal layout
childLayout.layoutParams = layoutParams
}
//가로와 세로를 모두 match parent로 매치 레이아웃 만드는 부분
val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
btnParams.weight = 1.0f
//버튼 생성 및 버튼 할당하는 부분
val normalBtn = Button(this).apply {
text = (i + 1).toString() //normalBtn.text =(i+1).toString()과 동일
layoutParams = btnParams //동일한 크기의 버튼 넣어준다.
id = i //버튼의 아이디가 순서대로 정해진다.
setOnClickListener{
val btn = findViewById<Button>(id)
if(randomNum==id+1){
btn.text = "BINGO!"
}else{
btn.text ="SAFE"
btn.isEnabled = false
}
}
}
childLayout?.addView(normalBtn)
if(i % 3 == 2 || i == (btnCount-1)){
linearLayout.addView(childLayout)
}
}
}
}
실행화면
첫 페이지에서 선택한 숫자에 따라 두번째 페이지에서 생성되는 버튼의 수가 달라진다.
'코딩 기록 > Kotlin' 카테고리의 다른 글
Comments