본문 바로가기
안드로이드 스튜디오 앱 개발/실제 앱 개발 과정

[안드로이드 스튜디오] 앱에서 창 다시 보지 않기 기능 구현하기 (SharedPreference 이용)

by 망댕이 2024. 5. 3.
반응형

앱에서 설명이나 공지 창이 뜰 때 매번 반복해서 닫기 버튼이 눌러 닫는다면 정말 불편합니다.

그래서 닫기 버튼뿐만 아니라 다시 보지 않기 버튼도 있는 것을 볼 수 있는데요.

 

오늘은 SharedPreference를 이용하여 다시 보지 않기 버튼을 눌렀을 때 앱을 껐다 켜도 더 이상 해당 창이 뜨지 않는 기능을 만들어보도록 하겠습니다.

예시 1

우선 이와 같은 기능을 구현하기 위해서는 SharedPreferences를 많이 사용합니다.

SharedPreferences는 안드로이드 앱에서 간단한 데이터를 저장하고 관리하기 위한 편리한 방법 중 하나입니다.

그리하여 다시 보지 않기 버튼을 눌렀을 때 간단한 값을 저장하고 불러온 후, 값에 따라 창을 띄울지 말지 결정할 수 있습니다.

 

그래서 아래와 같이 SharedPreferences를 이용하면 [예시 1]과 같은 창을 만들고 다시 보지 않기 버튼을 눌렀을 때 더 이상 창이 뜨지 않도록 할 수 있습니다.

public class Game2Activity extends AppCompatActivity {
	SharedPreferences sharedPreferences_game2; 

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

        sharedPreferences_game2 = getSharedPreferences("dialog_game2", Context.MODE_PRIVATE);  // dialog_game2라는 이름의 SharedPreferencs 객체 생성 
        int key = sharedPreferences_game2.getInt("key2", 0);  // "key2"는 저장할 데이터의 키이고, 0은 해당 키에 대한 값입니다.
        if(key == 0)  // key값이 0일때 커스텀 Dialog창 뜨도록 코드 입력
            Dialog dialog = new Dialog(Game2Activity.this);
            dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            dialog.setContentView(R.layout.dialog_game2);
            dialog.setCanceledOnTouchOutside(false);
            dialog.show();
            Button nobutton = (Button)dialog.findViewById(R.id.noButton_game2); // '다시 보지 않기' 버튼
            Button yesbutton = (Button)dialog.findViewById(R.id.yesButton_game2); // '확인' 버튼
            nobutton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    SharedPreferences.Editor editor = sharedPreferences_game2.edit();
                    editor.putInt("key2", 1); // '다시 보지 않기' 버튼을 눌렀을 때 "key2"의 value 값을 1로 변경
                    editor.apply();
                    dialog.dismiss();
                }
            });
            yesbutton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dialog.dismiss();
                }
            });
        }
    }
}

 

//dialog_game2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    android:gravity="center"
    android:minWidth="300dp"
    android:orientation="vertical"
    android:padding="20dp">

    <TextView
        android:id="@+id/corfirmtextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:minHeight="50dp"
        android:text="타이머를 누르고 5초에 가장 가깝게 누르는 사람이\n승리하는 게임입니다."
        android:textColor="#000000"
        android:textSize="15sp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="horizontal">

        <android.widget.Button
            android:id="@+id/noButton_game2"
            android:background="@drawable/balence_button_background"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_marginEnd="7dp"
            android:layout_weight="1"
            android:text="다시 보지 않기"
            android:textSize="14sp" />

        <android.widget.Button
            android:id="@+id/yesButton_game2"
            android:background="@drawable/balence_button_background"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:text="확인"
            android:textSize="14sp" />

    </LinearLayout>

</LinearLayout>

 

 

반응형