[Android/Kotlin] 버튼누르면 뜨는 Dialog 만들기
2023. 1. 29. 10:17ㆍ교내활동/Programming GURU2
반응형
생각해보면.. 참 쉬웠던건데.. 이것도 엄청 헤맸다.
수업을 듣긴 했으나 기억에 남는게 없다보니 구글링이 날 살렸다.
코드를 어떻게든 줄이고 레이아웃도 좀 줄여보려고 했던건데.. 내 능력 밖의 일임을 깨달았고
팀원의 도움으로 결국에는 무식하게 코드를 짰다.
처음에 하던 방법도 팀원이 이야기해줬던건데 안뜬다. 왜인지 모르겠다.
더 고민하고있다가 마감도 못칠 것 같아 그냥 엎었다.
00아 너가 고생했다 사랑한다
<fragment_home.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"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:visibility="visible">
<!-- 상단 3개 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<ImageButton
android:id="@+id/btnTrash"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:paddingRight="5dp"
android:scaleType="fitXY"
android:src="@drawable/trash_btn"
tools:ignore="SpeakableTextPresentCheck" />
<ImageButton
android:id="@+id/btnGlass"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:paddingRight="5dp"
android:scaleType="fitXY"
android:src="@drawable/glass_btn"
tools:ignore="SpeakableTextPresentCheck" />
<ImageButton
android:id="@+id/btnPaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/paper_btn"
tools:ignore="SpeakableTextPresentCheck" />
</LinearLayout>
<!-- 하단 3개 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<ImageButton
android:id="@+id/btnPlastic"
android:layout_width="wrap_content"
android:layout_height="144dp"
android:layout_weight="1"
android:paddingRight="5dp"
android:scaleType="fitXY"
android:src="@drawable/plastic_btn"
tools:ignore="SpeakableTextPresentCheck" />
<ImageButton
android:id="@+id/btnVinyl"
android:layout_width="wrap_content"
android:layout_height="142dp"
android:layout_weight="1"
android:paddingRight="5dp"
android:scaleType="fitXY"
android:src="@drawable/vinyl_btn"
tools:ignore="SpeakableTextPresentCheck" />
<ImageButton
android:id="@+id/btnCan"
android:layout_width="wrap_content"
android:layout_height="139dp"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/can_btn"
tools:ignore="SpeakableTextPresentCheck" />
</LinearLayout>
</LinearLayout>
사실 이 레이아웃은 좀 망한 레이아웃이다.
지금생각해도 어이가 없다.
왜 Linear로 감싸서 썼을까? 그냥 Table 쓰면 될텐데...
<FragmentHome.kt>
import android.app.AlertDialog
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
class HomeFragment : Fragment() {
// 분리수거 안내 버튼
lateinit var btnTrash : ImageButton
lateinit var btnGlass: ImageButton
lateinit var btnPaper: ImageButton
lateinit var btnPlastic : ImageButton
lateinit var btnVinyl : ImageButton
lateinit var btnCan : ImageButton
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
val view = inflater.inflate(R.layout.fragment_home, container, false)
val hActivity = activity as HomeActivity
// 버튼 클릭 시 분리수거 방법
btnTrash = view.findViewById(R.id.btnTrash)
btnGlass = view.findViewById(R.id.btnGlass)
btnPaper = view.findViewById(R.id.btnPaper)
btnPlastic = view.findViewById(R.id.btnPlastic)
btnVinyl = view.findViewById(R.id.btnVinyl)
btnCan = view.findViewById(R.id.btnCan)
// 일반 쓰레기
btnTrash.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_trash, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("일반쓰레기 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
// 유리
btnGlass.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_glass, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("유리 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
// 종이
btnPaper.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_paper, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("종이 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
// 플라스틱
btnPlastic.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_plastic, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("플라스틱 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
// 비닐
btnVinyl.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_vinyl, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("비닐 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
// 캔
btnCan.setOnClickListener {
var dialogView = View.inflate(hActivity, R.layout.dialog_can, null)
var dlg = AlertDialog.Builder(hActivity)
dlg.setTitle("캔 배출 방법")
dlg.setView(dialogView)
dlg.setCancelable(true)
dlg.setPositiveButton("확인", null)
dlg.show()
}
return view
}
}
마찬가지로 Fragment에서 작업하던 것이다보니 findViewById()를 바로 사용할 수 없다.
그래서 view = inflater.inflate() 을 통해 액티비티에서 사용하는 것 처럼 쓸 수 있었다.
아직도 context라는 개념이 잘 잡히지는 않았으나, Activity는 context를 상속받았지만 Fragment는 상속받지 않았다는 점만 확실하게 알았고, context 관련한 것들을 Fragment에서 사용하고 싶을 때는 Fragment가 올라가는 Activity를 가져와서 사용하면 된다는 점을 알게 되었다.
<dialog_view.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">
<ImageView
android:id="@+id/can"
android:src="@drawable/img_can"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
이런식으로 각 분류별로 dialog xml 파일을 만들어주어 적용시켰다.
앱개발은 어렵다
반응형
'교내활동 > Programming GURU2' 카테고리의 다른 글
GURU2 Android 해커톤 후기 (3) | 2023.02.02 |
---|---|
[Android/Kotlin] DB 정보 가져오기 (1) | 2023.01.29 |
[Android/Kotlin] 자동으로 넘어가는 배너 만들기 (0) | 2023.01.29 |
Android Kotlin Fragment (0) | 2023.01.17 |
Android Kotlin Service (0) | 2023.01.17 |