본문 바로가기
Android/Android Lab

[Java] 안드로이드 간단한 설문조사 기능 구현

by 수쓰뎁 2023. 1. 28.


설문조사 기능 설명

설문조사 기능은 간단한 설문에 대한 답변 내용을 수집하는 것을 말한다.

다양한 앱에서 설문조사 기능이 활용된다.

예를 들면, 건강관리 앱에서 간단한 기초문진과 같은 기능에 활용될 수 있다.

 

이번 포스팅에서는 라디오버튼을 활용한 간단한 설문조사 앱을 구현해본다.

설문 내용은 재미삼아 작성했다.

리그오브레전드에서 자주 사용하는 스킨을 선택하고 스킨선택 버튼을 누르면 해당 스킨 이미지를 보여주도록 구현했다.


간단한 설문조사 기능 구현

먼저 간단한 설문조사 기능 구현 순서를 다음과 같이 요약한다.

  • 리소스 정리
  • activity_survey_skin.xml 작성
  • SurveyActivity.java 생성
  • AndroidManifest.xml에 SurveyActivity 추가

 

1. 리소스 정리

가장 먼저 사용하고자 하는 리소스를 정리해야 한다.

정리할 리소스는 다음과 같다.

  • 텍스트 리소스
  • 이미지 리소스
  • 커스텀 버튼 작성

 

1) 텍스트 리소스

먼저 텍스트 리소스를 정리해보자.

규모가 아주아주 작은 간단한 설문조사 앱이기 때문에 굳이 텍스트 리소스를 정리할 필요는 없지만, 평소 정리하는 습관을 들이기 위해 해본다.

res - values - strings.xml 에서 다음과 필요한 내용을 추가한다.

<resources>
    <string name="app_name">SimpleSurvey</string>

    <string name="select_skin_survey_title">스킨 선호도 설문조사 이벤트</string>
    <string name="select_skin_survey_description">받고싶은 스킨을 선택해주세요. \n추첨을 통해 선택한 스킨을 제공합니다. </string>
    <string name="select_done">선택 완료</string>

    <string name="shaco_skin_01">샤코</string>
    <string name="shaco_skin_02">궁전 어릿광대 샤코</string>
    <string name="shaco_skin_03">신바람 탈 샤코</string>
    <string name="shaco_skin_04">암흑의 별 샤코</string>
    <string name="shaco_skin_05">비전 마법사 샤코</string>

</resources>

 

2) 이미지 리소스

이미지 리소스로 5개 이미지를 사용할 것이다.

리그오브레전드의 챔피언인 샤코 스킨 5개를 사용해본다.(내가 샤코 유저라서ㅋㅋ)

 

3) 커스텀 버튼 작성

설문조사에 사용하는 버튼은 커스텀 버튼을 사용할 것이기 때문에 먼저 커스텀 버튼에 대한 리소스 구성이 필요하다.

다음과 같이 간단한 커스텀 버튼을 작성하여 리소스로 사용해보자.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" >
    <solid android:color="@color/purple_200"/>
    <corners android:topLeftRadius="8dp"
        android:topRightRadius="8dp"
        android:bottomLeftRadius="8dp"
        android:bottomRightRadius="8dp" />
</shape>

이렇게 drawable 리소스를 작성하여 사용하면 다음과 같이 둥근 모서리의 버튼을 만들 수 있다.

 

 

2. activity_survey_skin.xml

가장 먼저 스플래시 화면으로 사용할 화면을 구현한다.

다음과 같이 activity_survey_skin.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:layout_marginTop="20dp"
        android:layout_marginStart="16dp"
        android:text="@string/select_skin_survey_title"
        android:textSize="25sp"
        android:textColor="@color/black"/>

    <TextView
        android:id="@+id/tv_survey_intro_content"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="15dp"
        android:layout_marginStart="16dp"
        android:lineSpacingExtra="8.7dp"
        android:text="@string/select_skin_survey_description"
        android:textSize="14dp" />

    <ImageView
        android:id="@+id/iv_skin"
        android:layout_width="match_parent"
        android:layout_marginTop="20dp"
        android:layout_marginBottom="20dp"
        android:layout_height="200dp" />

    <RadioGroup
        android:id="@+id/rg_skin"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <RadioButton
            android:id="@+id/rb1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="샤코" />

        <RadioButton
            android:id="@+id/rb2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="궁전 어릿광대 샤코" />

        <RadioButton
            android:id="@+id/rb3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="신바람 탈 샤코" />

        <RadioButton
            android:id="@+id/rb4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="암흑의 별 샤코" />

        <RadioButton
            android:id="@+id/rb5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="비전 마법사 샤코" />
    </RadioGroup>

<!--    <Button-->
<!--        android:id="@+id/btn_select"-->
<!--        android:layout_width="match_parent"-->
<!--        android:layout_height="60dp"-->
<!--        android:text="스킨 선택"-->
<!--        android:textSize="18sp" />-->

    <TextView
        android:id="@+id/tv_done"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:layout_gravity="bottom"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="20.3dp"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:background="@drawable/btn_round_rect"
        android:gravity="center"
        android:paddingVertical="16.3dp"
        android:text="@string/select_done"
        android:textColor="@color/white"
        android:textSize="16dp" />

</LinearLayout>

 

3. SurveyActivity.java

간단한 설문조사 구현을 위해 다음과 같이 SurveyActivity를 작성한다.

public class SurveyActivity extends AppCompatActivity {

    private RadioGroup rg;
    private RadioButton rb1, rb2, rb3, rb4, rb5;
    private TextView tv_done;
    private ImageView iv_skin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_survey_skin);

        initView();
    }

    private void initView() {
        rg = findViewById(R.id.rg_skin);

        rb1 = findViewById(R.id.rb1);
        rb2 = findViewById(R.id.rb2);
        rb3 = findViewById(R.id.rb3);
        rb4 = findViewById(R.id.rb4);
        rb5 = findViewById(R.id.rb5);

        tv_done = findViewById(R.id.tv_done);

        iv_skin = findViewById(R.id.iv_skin);

        rg.setOnCheckedChangeListener(((radioGroup, checkedId) -> {
            if (R.id.rb1 == checkedId) {
                iv_skin.setVisibility(View.INVISIBLE);
                iv_skin.setImageResource(R.drawable.shaco_0);
                selectSkin();
            } else if (R.id.rb2 == checkedId) {
                iv_skin.setVisibility(View.INVISIBLE);
                iv_skin.setImageResource(R.drawable.shaco_1);
                selectSkin();
            } else if (R.id.rb3 == checkedId) {
                iv_skin.setVisibility(View.INVISIBLE);
                iv_skin.setImageResource(R.drawable.shaco_2);
                selectSkin();
            } else if (R.id.rb4 == checkedId) {
                iv_skin.setVisibility(View.INVISIBLE);
                iv_skin.setImageResource(R.drawable.shaco_3);
                selectSkin();
            } else if (R.id.rb5 == checkedId) {
                iv_skin.setVisibility(View.INVISIBLE);
                iv_skin.setImageResource(R.drawable.shaco_4);
                selectSkin();
            }
        }));

    }

    private void selectSkin() {
        tv_done.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                iv_skin.setVisibility(View.VISIBLE);
            }
        });
    }
}

initView() 메서드를 작성하여 화면을 초기화 한다.

해당 메서드에서는 라디오버튼 선택에 대한 것을 구현한다.

selectSkin() 메서드에서는 선택버튼을 눌렀을 때 이미지가 보여지도록 구현한다.

해당 메서드는 initView() 메서드의 라디오버튼 선택 시 호출된다.

 

4. AndroidManifest.xml

간단한 설문조사 구현을 위해 필요한 것은 모두 작성되었다.

마무리로 AndroidManifest의 <application> 태그 안에 새로 작성된 SplashActivity를 추가해준다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/Theme.SimpleSurvey"
        tools:targetApi="31">
        <activity
            android:name=".SurveyActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

앱을 실행했을 때 시작되는 액티비티가 SurveyActivity가 되어야 하므로 위와 같이 "android.intent.action.MAIN"이 지정된 <activity> 태그의 이름을 SurveyActivity로 교체한다.

이후 새로운 <activity> 태그를 생성하여 이름에 MainActivity를 추가해준다.


3. 실행 결과

작성한 간단 설문조사 앱 실행 결과는 다음과 같다.

라디오 버튼을 통해 원하는 샤코 스킨을 선택하고 선택완료 버튼을 누르면 화면에 해당 스킨 이미지가 나오는 것을 볼 수 있다. 이 기본적인 기능을 활용하여 다양한 앱을 작성할 수 있다.

반응형

댓글