동적버튼 기능을 활용한 숫자찾기 게임(찾을시 BINGO출력!)
https://d-footprint.tistory.com/49
activity_main
<Spinner
android:layout_width="145dp"
android:layout_height="52dp"
android:id="@+id/spinner"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginLeft="36dp"
android:layout_marginStart="36dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="40dp"/>
<Button
android:text="count"
android:layout_width="131dp"
android:layout_height="52dp"
android:id="@+id/count"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginEnd="36dp"
android:layout_marginRight="36dp"
app:layout_constraintTop_toTopOf="parent"
android:layout_marginTop="40dp"/>
<LinearLayout
android:id="@+id/linerLayout"
android:layout_width="319dp"
android:layout_height="400dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/reset"
android:layout_marginTop="44dp">
</LinearLayout>
<Button
android:text="reset"
android:layout_width="316dp"
android:layout_height="53dp" android:id="@+id/reset"
app:layout_constraintTop_toBottomOf="@+id/spinner"
android:layout_marginTop="28dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.492"/>
item_spinner
spinner item 생성
<?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"/>
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 스피너 설정
setupSpinner()
// count 버튼(spinner에서 선택한 숫자만큼 숫자버튼 생성)
val countBtn = findViewById<Button>(R.id.count)
countBtn.setOnClickListener{
val spinner = findViewById<Spinner>(R.id.spinner)
println("------------->" + spinner.selectedItem.toString())
setBlockLayout(spinner.selectedItem.toString().toInt())
}
// reset 버튼
val resetBtn = findViewById<Button>(R.id.reset)
resetBtn.setOnClickListener{
val linerLayout = findViewById<LinearLayout>(R.id.linerLayout)
linerLayout.removeAllViews()
setupSpinner()
}
}
fun setBlockLayout(count : Int){
val linerLayout = findViewById<LinearLayout>(R.id.linerLayout)
linerLayout.removeAllViews()
val randomNumber:Int = (1..count).random()
println("randomNumber:$randomNumber")
var childLayout:LinearLayout? = null
for(i in 0 until count){
// 버튼을 3개씩 배치하기 위해서
if(i % 3 == 0) {
childLayout = LinearLayout(this)
childLayout.orientation = LinearLayout.HORIZONTAL
val layoutParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100)
childLayout.layoutParams = layoutParams
childLayout.setBackgroundColor(Color.parseColor("#ffffff"))
}
// 동적버튼(버튼 개수에 따른 나열)
val btnParams = LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT)
btnParams.weight = 1.0f
btnParams.setMargins(10, 10, 10, 10)
val normalBtn = Button(this).apply {
//width = getDPI(100)
//height = getDPI(100)
text = (i + 1).toString()
setBackgroundColor(Color.parseColor("#ff0000"))
setTextColor(Color.parseColor("#ffffff"))
textSize = 24.0f
layoutParams = btnParams
id = i
setOnClickListener {
println("${id+1}번의 아이디를 가진 버튼입니다.")
val btn = findViewById<Button>(id)
btn.isEnabled = false
if(randomNumber === (id + 1)){
btn.text = "Bingo!"
setTextColor(Color.parseColor("#0000ff"))
setBackgroundColor(Color.parseColor("#ffff00"))
AlertDialog.Builder(this@MainActivity)
.setTitle("축하합니다 짝짝짝")
.setMessage("${id + 1} 번입니다")
.setCancelable(false)
.setNeutralButton("닫기", DialogInterface.OnClickListener { dialog, which ->
}).show()
}
else{
btn.text = "safe"
background = ContextCompat.getDrawable(this.context, R.drawable.dummy_image_ok)
}
}
}
normalBtn.background = ContextCompat.getDrawable(this, R.drawable.dummy_image)
childLayout?.addView(normalBtn)
if(i % 3 == 2 || i == (count - 1)) {
// LinearLayout에 버튼 추가하기
linerLayout.addView(childLayout)
}
}
}
// spinner에 배열의 값을 설정하는 함수
private fun setupSpinner() {
var countArr = arrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
println(countArr.contentToString())
// 어뎁터에 배열과 xml을 적용시킨다
val adapter = ArrayAdapter(this, R.layout.item_spinner, countArr)
// 마지막으로 실제 spinner에 적용
val spinner = findViewById<Spinner>(R.id.spinner)
spinner.adapter = adapter
}
}
'Java' 카테고리의 다른 글
[Java] Casting (0) | 2022.04.10 |
---|---|
[Java] Break (0) | 2022.04.08 |
[Java] ArrayList (0) | 2022.04.07 |
[Java] 배열 (0) | 2022.02.11 |
[Java] 첫번째 (0) | 2022.02.03 |
댓글