개발일지/멀티메모

[멀티메모] 5일차

Emil :) 2019. 12. 18. 18:15
728x90
반응형

최종 목표


  1. 음성녹음 버그 수정
  2. TODO 기능 추가하기 (푸시 알림 기능도 구현해보도록 하자)
  3. 메모 리스트 좌우로 슬라이드 하면 삭제 되도록 하기

 

오늘의 목표


  1. 할일 기능 구현하기
  2. 필요한 데이터베이스 세팅하기

참고


타임피커 다이얼로그로 띄우기
https://lktprogrammer.tistory.com/158

 

[Android] 안드로이드 - 날짜 및 시간 정보 입력받기 (DatePickerDialog / TimePickerDialog)

안드로이드 앱을 개발하다 보면 사용자로부터 날짜 및 시간 정보를 입력받는 경우가 많습니다. 안드로이드에서 제공하는 DatePickerDialog와 TimePickerDialog를 사용하면 이러한 입력 Dialog를 쉽게 구현할 수 있..

lktprogrammer.tistory.com

 

진행 과정


1. UI 다시 짜기


기존 UI는 짜놨었는데.. 뭔가 좀 아다리가 안맞아서 다시 짰다. 일단 '시작' 을 누르면 데이트피커와 타임피커가 나오는거고.. 거기서 날짜와 시간을 고르면 텍스트뷰에 나타나는 방식으로 표현하고자 했다.

todolist_activity.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">

    <EditText
        android:id="@+id/edtTitle"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="5dp"
        android:textSize="40dp"
        android:hint="제목"
        android:background="@null"/>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tvStart"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="시작"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/tvStartYear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartYear1"
            android:text="0000"/>
        <TextView
            android:id="@+id/tvStartYear1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartMonth"
            android:text="년"/>
        <TextView
            android:id="@+id/tvStartMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartMonth1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvStartMonth1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartDay"
            android:text="월"/>
        <TextView
            android:id="@+id/tvStartDay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartDay1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvStartDay1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartHour"
            android:text="일"/>
        <TextView
            android:id="@+id/tvStartHour"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStarthour1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvStarthour1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartMinute"
            android:text="시"/>
        <TextView
            android:id="@+id/tvStartMinute"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvStartMinute1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvStartMinute1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:text="분"/>
    </RelativeLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/tvEnd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:text="종료"
            android:textSize="20dp"/>
        <TextView
            android:id="@+id/tvEndYear"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndYear1"
            android:text="0000"/>
        <TextView
            android:id="@+id/tvEndYear1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndMonth"
            android:text="년"/>
        <TextView
            android:id="@+id/tvEndMonth"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndMonth1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvEndMonth1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndDay"
            android:text="월"/>
        <TextView
            android:id="@+id/tvEndDay"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndDay1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvEndDay1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndHour"
            android:text="일"/>
        <TextView
            android:id="@+id/tvEndHour"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndhour1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvEndhour1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndMinute"
            android:text="시"/>
        <TextView
            android:id="@+id/tvEndMinute"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_toLeftOf="@+id/tvEndMinute1"
            android:text="00"/>
        <TextView
            android:id="@+id/tvEndMinute1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:text="분"/>
    </RelativeLayout>
    <TextView
        android:layout_marginTop="30dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:text="메모"
        android:textSize="20dp" />
    <EditText
        android:id="@+id/etMemo"
        android:layout_width="wrap_content"
        android:layout_height="210dp"
        android:layout_marginHorizontal="10dp"
        android:layout_marginVertical="10dp"
        android:background="@drawable/memo_back" />
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="100dp"
        android:gravity="center">
        <Button
            android:id="@+id/btnCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="취소" />
        <Button
            android:id="@+id/btnSave"
            android:layout_marginLeft="50dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="저장"/>
    </LinearLayout>
</LinearLayout>

음.. 좀 많이 원시적이다. 이걸 해결할 수 있는 방법이 있을텐데, 하나의 텍스트 뷰 안에서 해결하고 싶었다.. 그래서 방법을 찾아봤는데, 일단 지금은 기능구현을 빨리 하고싶어서 다음에 하기로 했다.

일단 UI는 이렇게 되있다.

그리고, 시작과 종료를 누르면 타임피커와 데이트 피커가 등장하도록 자바에서 짜주자.

TodolistActivity.java

package org.androidtown.multimemo;

import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.TimePicker;

public class TodolistActivity extends AppCompatActivity {

    //피커 다이얼로그 리스너 설정
    DatePickerDialog.OnDateSetListener DatecallbackMethod;
    TimePickerDialog.OnTimeSetListener TimecallbackMethod;

    //사용될 객체들 선언해주기
    Button btnSave, btnCancel;
    EditText etTodolist;
    TextView tvTitle, tvStart, tvStartYear, tvStartMonth, tvStartDay, tvStartHour, tvStartMinute;
    TextView tvEnd, tvEndYear, tvEndMonth, tvEndDay, tvEndHour, tvEndMinute;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.todolist_activity);

        btnSave = findViewById(R.id.btnSave);
        btnCancel = findViewById(R.id.btnCancel);
        etTodolist = findViewById(R.id.etMemo);
        tvTitle = findViewById(R.id.edtTitle);

        tvStart = findViewById(R.id.tvStart);
        tvStartYear = findViewById(R.id.tvStartYear);
        tvStartMonth = findViewById(R.id.tvStartMonth);
        tvStartDay = findViewById(R.id.tvStartDay);
        tvStartHour = findViewById(R.id.tvStartHour);
        tvStartMinute = findViewById(R.id.tvStartMinute);
        tvEnd = findViewById(R.id.tvEnd);
        tvEndYear = findViewById(R.id.tvEndYear);
        tvEndMonth = findViewById(R.id.tvEndMonth);
        tvEndDay = findViewById(R.id.tvEndDay);
        tvEndHour = findViewById(R.id.tvEndHour);
        tvEndMinute = findViewById(R.id.tvEndMinute);

        //시작 시간 설정
        tvStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //시간을 받을 콜백메서드
                TimecallbackMethod = new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        tvStartHour.setText(Integer.toString(hourOfDay));
                        tvStartMinute.setText(Integer.toString(minute));
                    }
                };

                TimePickerDialog Timedialog = new TimePickerDialog(TodolistActivity.this, TimecallbackMethod, 0, 0, true);
                Timedialog.show();

                //날짜를 받을 콜백메서드
                DatecallbackMethod = new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                    {
                        tvStartYear.setText(Integer.toString(year));
                        tvStartMonth.setText(Integer.toString(monthOfYear + 1));
                        tvStartDay.setText(Integer.toString(dayOfMonth));
                    }
                };
                DatePickerDialog Datedialog = new DatePickerDialog(TodolistActivity.this, DatecallbackMethod, 2019, 12, 18);
                Datedialog.show();
            }
        });

        //종료 시간 설정
        tvEnd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                //시간을 받을 콜백메서드
                TimecallbackMethod = new TimePickerDialog.OnTimeSetListener() {
                    @Override
                    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
                        tvEndHour.setText(Integer.toString(hourOfDay));
                        tvEndMinute.setText(Integer.toString(minute));
                    }
                };

                TimePickerDialog Timedialog = new TimePickerDialog(TodolistActivity.this, TimecallbackMethod, 0, 0, true);
                Timedialog.show();

                //날짜를 받을 콜백메서드
                DatecallbackMethod = new DatePickerDialog.OnDateSetListener()
                {
                    @Override
                    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                    {
                        tvEndYear.setText(Integer.toString(year));
                        tvEndMonth.setText(Integer.toString(monthOfYear + 1));
                        tvEndDay.setText(Integer.toString(dayOfMonth));
                    }
                };
                DatePickerDialog Datedialog = new DatePickerDialog(TodolistActivity.this, DatecallbackMethod, 2019, 12, 18);
                Datedialog.show();
            }
        });
    }
}

 

기능은 별거 없는데 드럽게 길다. 아마 이부분때문일거다..

        btnSave = findViewById(R.id.btnSave);
        btnCancel = findViewById(R.id.btnCancel);
        etTodolist = findViewById(R.id.etMemo);
        tvTitle = findViewById(R.id.edtTitle);

        tvStart = findViewById(R.id.tvStart);
        tvStartYear = findViewById(R.id.tvStartYear);
        tvStartMonth = findViewById(R.id.tvStartMonth);
        tvStartDay = findViewById(R.id.tvStartDay);
        tvStartHour = findViewById(R.id.tvStartHour);
        tvStartMinute = findViewById(R.id.tvStartMinute);
        tvEnd = findViewById(R.id.tvEnd);
        tvEndYear = findViewById(R.id.tvEndYear);
        tvEndMonth = findViewById(R.id.tvEndMonth);
        tvEndDay = findViewById(R.id.tvEndDay);
        tvEndHour = findViewById(R.id.tvEndHour);
        tvEndMinute = findViewById(R.id.tvEndMinute);

구웨에에엑

이거 좀 어떻게 하는 방법이 없을까?

2. 버터나이프와 데이터바인딩


버터나이프와 데이터바인딩을 사용하면 된다고한다.

근데 이걸로 하기보다는 지금 일단 나는 기능구현을 빨리 하고싶다 (...) 다음 포스팅에서 다루도록 하겠다.

 

오늘의 결과


막상 하고 나니까 ㅈ도없네..

암튼 다음에 DB랑 연동시키고, 나아가 리사이클러 뷰에 스와이프 적용까지 해보도록하자.

스와이프가 넘나어려운것.

728x90
반응형

'개발일지 > 멀티메모' 카테고리의 다른 글

[멀티메모] 4일차  (2) 2019.12.14
[멀티메모] 3일차  (0) 2019.12.02
[멀티메모] 2일차  (0) 2019.11.30
[멀티메모] 1일차  (0) 2019.11.26