프로젝트 [코테 복습] - 문제 만들기 화면

유의선·2024년 5월 12일

코테 복습 프로젝트

목록 보기
10/13

문제를 추가하는 화면을 만들었다.


먼저 themes.xml 파일을 수정해 앱 전체에 적용될 색상을 바꾸었다.

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Base.Theme.CodingTest_Reviewe" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Customize your light theme here. -->
        <!-- <item name="colorPrimary">@color/my_light_primary</item> -->
        <item name="colorPrimary">#00b0f0</item>
        <item name="colorPrimaryDark">#00b0f0</item>
        <item name="android:windowBackground">@color/white</item>
    </style>

    <style name="Theme.CodingTest_Reviewe" parent="Base.Theme.CodingTest_Reviewe" />
</resources>

문제 추가 화면의 레이아웃과 코드는 다음과 같이 만들었다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="40dp">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ADD TASK"
        android:textSize="34sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/editTextTask_add"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:background="@drawable/input_drawable"
        android:ems="10"
        android:hint="Task"
        android:inputType="text"
        android:paddingLeft="10dp"
        android:paddingTop="20dp"
        android:paddingRight="10dp"
        android:paddingBottom="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <Button
        android:id="@+id/buttonAdd"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:paddingTop="10dp"
        android:paddingBottom="10dp"
        android:text="ADD"
        android:textSize="24sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

    <FrameLayout
        android:id="@+id/frameLayout"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editTextTask_add">

        <Button
            android:id="@+id/buttonSetTime_add"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            android:backgroundTint="#00000000"
            android:ems="10"
            android:inputType="text" />

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@drawable/input_drawable"
            android:orientation="horizontal"
            android:paddingLeft="10dp"
            android:paddingTop="20dp"
            android:paddingRight="10dp"
            android:paddingBottom="20dp">

            <TextView
                android:id="@+id/textYear_add"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:hint="Date"
                android:textSize="18sp" />

            <TextView
                android:id="@+id/textDate_add"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="20dp"
                android:textSize="18sp" />

        </LinearLayout>
    </FrameLayout>

    <EditText
        android:id="@+id/editTextAdd_add"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:background="@drawable/input_drawable"
        android:ems="10"
        android:hint="Address"
        android:inputType="text"
        android:paddingLeft="10dp"
        android:paddingTop="20dp"
        android:paddingRight="10dp"
        android:paddingBottom="20dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/frameLayout" />

</androidx.constraintlayout.widget.ConstraintLayout>
public class AddActivity extends AppCompatActivity {
    EditText editTextTask;
    EditText editTextAdd;
    Button buttonSetTime;
    Button buttonAdd;
    TextView textYear;
    TextView textDate;

    String yearString;
    String dateString;
    String addString;

    DatePickerDialog datePickerDialog;

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

        // Views
        editTextTask = findViewById(R.id.editTextTask_add);
        editTextAdd = findViewById(R.id.editTextAdd_add);
        buttonSetTime = findViewById(R.id.buttonSetTime_add);
        buttonAdd = findViewById(R.id.buttonAdd);
        textYear = findViewById(R.id.textYear_add);
        textDate = findViewById(R.id.textDate_add);

        // init DatePicker
        initDatePicker();

        // button set Date
        buttonSetTime.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                datePickerDialog.show();
            }
        });

        // button transmit data to ListActivity and finish
        buttonAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String task = editTextTask.getText().toString();
                String date = yearString + " " + dateString;
                addString = editTextAdd.getText().toString();

                if(task == null || task.equals("")){
                    Toast.makeText(getApplicationContext(), "할 일을 입력해 주세요.", Toast.LENGTH_SHORT).show();
                }else if(yearString == null || yearString.equals("")){
                    Toast.makeText(getApplicationContext(), "날짜를 입력해 주세요.", Toast.LENGTH_SHORT).show();
                }else if(addString == null || addString.equals("")){
                    Toast.makeText(getApplicationContext(), "주소를 입력해 주세요.", Toast.LENGTH_SHORT).show();
                }else{
                    Intent intent = new Intent();
                    intent.putExtra("task", task);
                    intent.putExtra("date", date);
                    intent.putExtra("address", addString);
                    setResult(RESULT_OK, intent);
                    finish();
                }
            }
        });
    }

    // init DatePicker
    private void initDatePicker() {
        DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int month, int day) {
                month = month + 1;

                yearString = Integer.toString(year);
                dateString = month + "/" + day;

                textYear.setText(yearString);
                textDate.setText(dateString);
            }
        };

        Calendar calendar = Calendar.getInstance();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day = calendar.get(Calendar.DAY_OF_MONTH);
        int style = AlertDialog.THEME_HOLO_LIGHT;

        datePickerDialog = new DatePickerDialog(this, style, dateSetListener, year, month, day);
    }
}

복습할 내용과 날짜, 주소를 입력 받아 저장하도록 만들었다.

날짜를 입력받는 부분은 FrameLayout을 이용해 Button과 TextView가 겹치도록 하여
Button이 눌리면 DatePickerDialog를 띄워 날짜를 선택하고, 선택한 날짜가 TextView에 보이도록 만들었다.

입력상자의 View들의 배경은 직접 만든 drawable 파일을 사용하였다.

0개의 댓글