설문조사 기능구현
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">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="설문조사"
android:textSize="28sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.085"
app:layout_constraintVertical_bias="0.042"/>
<!-- 유저이름 -->
<TextView
android:id="@+id/userName"
android:text="이름"
android:textSize="24sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.075"
app:layout_constraintVertical_bias="0.122"/>
<EditText
android:layout_width="209dp"
android:layout_height="wrap_content"
android:inputType="textPersonName"
android:text=""
android:textSize="20sp"
android:ems="10"
android:id="@+id/editTextTextPersonName"
tools:ignore="MissingConstraints"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/userName"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.055"
app:layout_constraintVertical_bias="0.116"/>
<!-- 질문1 -->
<TextView
android:id="@+id/quest1"
android:text="질문1) 영어로 대화할 수 있습니까?"
android:textSize="22sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.146"
app:layout_constraintVertical_bias="0.217"/>
<RadioGroup
android:id="@+id/radioGroup"
android:layout_width="379dp"
android:layout_height="47dp"
android:orientation="horizontal"
tools:ignore="MissingConstraints"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.19"
app:layout_constraintVertical_bias="0.254">
<RadioButton
android:layout_weight="1"
android:text="예"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/q1Btn1"/>
<RadioButton
android:layout_weight="1"
android:text="아니오"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/q1Btn2"/>
<RadioButton
android:layout_weight="1"
android:text="모르겠습니다"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/q1Btn3"/>
</RadioGroup>
<!-- 질문2 -->
<TextView
android:id="@+id/quest2"
android:text="질문2) 영어 외에 관심 있는 언어는 무엇입니까?"
android:textSize="22sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.238"
app:layout_constraintVertical_bias="0.358"/>
<CheckBox
android:text="독일어"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkBox1"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.083"
app:layout_constraintVertical_bias="0.398"/>
<CheckBox
android:text="프랑스어"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkBox2"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.314"
app:layout_constraintVertical_bias="0.398"/>
<CheckBox
android:text="일본어"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkBox3"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.398"
app:layout_constraintHorizontal_bias="0.543"/>
<!-- 질문3 -->
<TextView
android:id="@+id/quest3"
android:text="질문3) 당신의 의견을 작성해 주십시오"
android:textSize="22sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.162"/>
<EditText
android:layout_width="477dp"
android:layout_height="197dp"
android:inputType="textPersonName"
android:text=""
android:textSize="20sp"
android:ems="10"
android:gravity="top"
android:id="@+id/userComment"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintHorizontal_bias="0.341"
app:layout_constraintVertical_bias="0.668"/>
<!-- 질문4 -->
<TextView
android:id="@+id/quest4"
android:text="당신의 연령대를 선택해 주십시오"
android:textSize="22sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:ignore="MissingConstraints"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.138"
app:layout_constraintVertical_bias="0.817"/>
<Spinner
android:layout_width="wrap_content"
android:layout_height="35dp"
android:id="@+id/spinner"
android:textSize="20sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.867"
app:layout_constraintHorizontal_bias="0.076"/>
<Button
android:text="결과"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/result"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintHorizontal_bias="0.948"
app:layout_constraintVertical_bias="0.971"/>
</androidx.constraintlayout.widget.ConstraintLayout>
xml파일 만들기
1. item_spinner.xml
app - src - main - res - menu에 Menu리소스파일 만들기
2. array.xml
app - src - main - res - values에 values XML File만들기
spinner
연령대를 선택할 수 있게 항목 만들기
// 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="ages">
<item>10대</item>
<item>20대</item>
<item>30대</item>
<item>40대</item>
<item>50대</item>
<item>60대 이상</item>
</string-array>
</resources>
bulid.gradle(:app)
buildFeatures{
viewBinding true
}
MainActivity
객체화
val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
...
setContentView(binding.root)
이름입력
var username = binding.userName.text // username이라는 변수에 입력받은 문자 저장
질문1) radio버튼
var q1Result = ""
binding.radioGroup.setOnCheckedChangeListener{ _, checkedId->
// 체크된 값의 따라서 변수의 다른값을 저장
when(checkedId){
R.id.q1Btn1 -> {
q1Result = "영어로 대화 가능"
}
R.id.q1Btn2 -> {
q1Result = "영어로 대화 불가능"
}
R.id.q1Btn3 -> {
q1Result = "영어로 대화가능여부 모름"
}
}
}
질문2) checkBox
// 체크됐을때와 안됐을때 각각 변수의 값 저장
// 독일어
var box1 = ""
binding.checkBox1.setOnCheckedChangeListener { _, isChecked ->
if(isChecked){
box1 = "독일어 가능"
}else{
box1 = "독일어 불가능"
}
}
// 프랑스어
var box2 = ""
binding.checkBox2.setOnCheckedChangeListener { _, isChecked ->
if(isChecked){
box2 = "프랑스어 가능"
}else{
box2 = "프랑스어 불가능"
}
}
// 일본어
var box3 = ""
binding.checkBox3.setOnCheckedChangeListener { _, isChecked ->
if(isChecked){
box3 = "일본어 가능"
}else{
box3 = "일본어 불가능"
}
}
질문3) 유저의견
// userComment라는 변수의 입력받은 의견을 저장
var userComment = binding.userComment.text
질문4) 연령대 선택
// onCreate함수 안에서 함수 호출
setupSpinnerFruit() // 값을 설정하는 함수를 호출
setupSpinnerHandler() // 선택한 값을 출력하는 함수를 호출
// onCreate함수 밖에서 함수 작성
fun setupSpinnerFruit(){ // 값을 설정하는 함수
val ages = resources.getStringArray(R.array.ages)
// 어탭터에 배열과 xml을 적용
val adapter = ArrayAdapter(this, R.layout.item_spinner, ages)
// spinner에 적용
binding.spinner.adapter = adapter
}
fun setupSpinnerHandler(){ // 선택한 값을 출력
binding.spinner.onItemSelectedListener = object:AdapterView.OnItemSelectedListener{
override fun onItemSelected(p0:AdapterView<*>?, view:View?, position:Int, id:Long) {
age = "${binding.spinner.getItemAtPosition(position)}"
}
override fun onNothingSelected(p0: AdapterView<*>?) {
}
}
}
결과버튼 클릭 시 입력한 값출력
binding.result.setOnClickListener {
AlertDialog.Builder(this@MainActivity).setTitle("설문조사 결과") // 제목
.setMessage( // 메세지
"${q1Result} \n${box1} \n${box2} \n${box3} \n${userComment} \n연령 : ${age}"
)
.setCancelable(false) // 화면밖터치시(ture=꺼짐 / false=안꺼짐)
.setNeutralButton("확인", DialogInterface.OnClickListener{ dialog, whitch->
}).show()
}
결과
실행 시 기본화면
설문작성
결과버튼 클릭시 나타나는 화면
문제점 (22.02.05)
코드작성 및 테스트중 라디오버튼 및 체크박스를 아예 터치하지 않았을 경우 최초로 설정된 빈값이 출력되는 문제 발견 오류해결방법을 찾는대로 해결하고 게시글 수정 예정
개선방법1 (22.02.06)
라디오버튼
var q1Result = "미응답"
처음 빈값이 아닌 미응답이라는 단어를 넣어둔다.
설문을 넘어갔을때, 결과창에서는 미응답이라고 출력이 된다.
체크박스
var box4 = ""
binding.checkBox4.setOnCheckedChangeListener { _, ischecked ->
if(ischecked){
box4 = "없음"
}else{
box4 = ""
}
}
관심있는 언어 선택란에서 없음버튼을 추가함.
setMessage("관심언어 : ${box1}${box2}${box3}${box4}") // 관심언어 부분만 적음
줄바꿈을 없애고 각 문항이 체크됐을때 해당하는 값이 출력되게 만듦.
(언어 + 없음의 중복체크 문제 및 정렬방식때문에 더 나은 해결방법을 찾아야함)
Author And Source
이 문제에 관하여(설문조사 기능구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@kucx1230/설문조사-기능구현저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)