안드로이드

안드로이드 프로그래밍 - 다용도 앱 만들기 4

IT의 큰손 2023. 1. 18. 16:52
728x90
  • 앱의 기능 설명
    • 1. 로그인 기능
    • 2. 메모장
    • 3. 달력
    • 4. 연락처
    • 5. 그림판
    • 6. 미니게임
    • 7. 계산기
    • 8. 스톱워치
    • 9. 가계부
  • 달력(일정 메모)

해당 날짜를 클릭
해당 날짜에 메모를 저장

 

  • 달력 xml 코드
더보기
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="#25E9FD35"
    android:orientation="vertical">

    <CalendarView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/calendarView"
        app:layout_constraintStart_toStartOf="parent"
        android:layout_marginLeft="8dp" android:layout_marginStart="8dp" app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
        app:layout_constraintHorizontal_bias="0.488" android:layout_marginTop="8dp"
        app:layout_constraintTop_toBottomOf="@+id/textView3"/>

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:gravity= "center"
        android:id="@+id/diaryTextView" android:layout_marginTop="16dp"
        app:layout_constraintTop_toBottomOf="@+id/calendarView" app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp" android:textAppearance="@style/TextAppearance.AppCompat.Large"/>
    <EditText
        android:layout_width="0dp"
        android:layout_height="100dp"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/contextEditText"
        app:layout_constraintTop_toBottomOf="@+id/diaryTextView" android:layout_marginTop="16dp"
        android:hint="내용을 입력하세요." android:layout_marginEnd="8dp" app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginRight="8dp" android:layout_marginStart="8dp"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
        android:visibility="invisible"/>

    <TextView
        android:id="@+id/textView2"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginStart="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp"
        android:visibility="invisible"
        app:layout_constraintBottom_toBottomOf="@+id/contextEditText"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@+id/contextEditText"
        app:layout_constraintTop_toTopOf="@+id/contextEditText" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:gravity="center"
        android:text="달력일기장"
        android:textAppearance="@style/TextAppearance.AppCompat.Large"
        android:textColor="#9E28B3"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:text="저장"
        android:layout_width="0dp"
        android:layout_marginBottom="20dp"
        android:layout_height="wrap_content"
        android:id="@+id/save_Btn" android:layout_marginTop="16dp"
        app:layout_constraintTop_toBottomOf="@+id/contextEditText" app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginEnd="8dp" android:layout_marginRight="8dp"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginLeft="8dp"
        android:layout_marginStart="8dp" android:visibility="invisible"/>

    <Button
        android:text="수정"
        android:layout_width="180dp"
        android:layout_height="wrap_content"
        android:id="@+id/cha_Btn"
        app:layout_constraintBaseline_toBaselineOf="@+id/save_Btn" app:layout_constraintStart_toStartOf="parent"
        android:layout_marginLeft="8dp" android:layout_marginStart="8dp"
        app:layout_constraintEnd_toStartOf="@+id/del_Btn" android:layout_marginEnd="8dp"
        android:layout_marginRight="8dp" android:visibility="invisible"/>
    <Button
        android:text="삭제"
        android:layout_width="176dp"
        android:layout_height="wrap_content"
        android:id="@+id/del_Btn"
        app:layout_constraintBaseline_toBaselineOf="@+id/cha_Btn" app:layout_constraintEnd_toEndOf="@+id/save_Btn"
        android:layout_marginEnd="8dp" android:layout_marginRight="8dp" android:visibility="invisible"></Button>

</android.support.constraint.ConstraintLayout>
  • 캘린더 뷰를 이용하여 달력을 사용하였다.
  • 저장, 수정, 삭제 버튼을 이용하여 해당 날짜에 해당하는 메모를 기입하고 수정, 삭제 한다.

 

  • 달력 java 코드
더보기
public class Activity2 extends AppCompatActivity {
        public String fname=null;
        public String str=null;
        public CalendarView calendarView;
        public Button cha_Btn,del_Btn,save_Btn;
        public TextView diaryTextView,textView2,textView3;
        public EditText contextEditText;
@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout2);
        calendarView=findViewById(R.id.calendarView);
        diaryTextView=findViewById(R.id.diaryTextView);
        save_Btn=findViewById(R.id.save_Btn);
        del_Btn=findViewById(R.id.del_Btn);
        cha_Btn=findViewById(R.id.cha_Btn);
        textView2=findViewById(R.id.textView2);
        textView3=findViewById(R.id.textView3);
        contextEditText=findViewById(R.id.contextEditText);
        String name=("Developer");
        final String userID=("");
        textView3.setText(name+"님의 달력 일기장");
        calendarView.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
                @Override
                public void onSelectedDayChange(@NonNull CalendarView view, int year, int month, int dayOfMonth) {
                        diaryTextView.setVisibility(View.VISIBLE);
                        save_Btn.setVisibility(View.VISIBLE);
                        contextEditText.setVisibility(View.VISIBLE);
                        textView2.setVisibility(View.INVISIBLE);
                        cha_Btn.setVisibility(View.INVISIBLE);
                        del_Btn.setVisibility(View.INVISIBLE);
                        diaryTextView.setText(String.format("%d / %d / %d",year,month+1,dayOfMonth));
                        contextEditText.setText("");
                        checkDay(year,month,dayOfMonth,userID);
                }
        });
        save_Btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                        saveDiary(fname);
                        str=contextEditText.getText().toString();
                        textView2.setText(str);
                        save_Btn.setVisibility(View.INVISIBLE);
                        cha_Btn.setVisibility(View.VISIBLE);
                        del_Btn.setVisibility(View.VISIBLE);
                        contextEditText.setVisibility(View.INVISIBLE);
                        textView2.setVisibility(View.VISIBLE);

                }
        });
}

        public void  checkDay(int cYear,int cMonth,int cDay,String userID){
                fname=""+userID+cYear+"-"+(cMonth+1)+""+"-"+cDay+".txt";//저장할 파일 이름설정
                FileInputStream fis=null;//FileStream fis 변수

                try{
                        fis=openFileInput(fname);

                        byte[] fileData=new byte[fis.available()];
                        fis.read(fileData);
                        fis.close();

                        str=new String(fileData);

                        contextEditText.setVisibility(View.INVISIBLE);
                        textView2.setVisibility(View.VISIBLE);
                        textView2.setText(str);

                        save_Btn.setVisibility(View.INVISIBLE);
                        cha_Btn.setVisibility(View.VISIBLE);
                        del_Btn.setVisibility(View.VISIBLE);

                        cha_Btn.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                        contextEditText.setVisibility(View.VISIBLE);
                                        textView2.setVisibility(View.INVISIBLE);
                                        contextEditText.setText(str);

                                        save_Btn.setVisibility(View.VISIBLE);
                                        cha_Btn.setVisibility(View.INVISIBLE);
                                        del_Btn.setVisibility(View.INVISIBLE);
                                        textView2.setText(contextEditText.getText());
                                }

                        });
                        del_Btn.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                        textView2.setVisibility(View.INVISIBLE);
                                        contextEditText.setText("");
                                        contextEditText.setVisibility(View.VISIBLE);
                                        save_Btn.setVisibility(View.VISIBLE);
                                        cha_Btn.setVisibility(View.INVISIBLE);
                                        del_Btn.setVisibility(View.INVISIBLE);
                                        removeDiary(fname);
                                }
                        });
                        if(textView2.getText()==null){
                                textView2.setVisibility(View.INVISIBLE);
                                diaryTextView.setVisibility(View.VISIBLE);
                                save_Btn.setVisibility(View.VISIBLE);
                                cha_Btn.setVisibility(View.INVISIBLE);
                                del_Btn.setVisibility(View.INVISIBLE);
                                contextEditText.setVisibility(View.VISIBLE);
                        }

                }catch (Exception e){
                        e.printStackTrace();
                }
        }
        @SuppressLint("WrongConstant")
        public void removeDiary(String readDay){
                FileOutputStream fos=null;

                try{
                        fos=openFileOutput(readDay,MODE_NO_LOCALIZED_COLLATORS);
                        String content="";
                        fos.write((content).getBytes());
                        fos.close();

                }catch (Exception e){
                        e.printStackTrace();
                }
        }
        @SuppressLint("WrongConstant")
        public void saveDiary(String readDay){
                FileOutputStream fos=null;

                try{
                        fos=openFileOutput(readDay,MODE_NO_LOCALIZED_COLLATORS);
                        String content=contextEditText.getText().toString();
                        fos.write((content).getBytes());
                        fos.close();
                }catch (Exception e){
                        e.printStackTrace();
                }
        }
        }
  • 우선, 각각의 버튼과 뷰들을 해당 java로 선언 하였다.
  • setVisibility를 이용하여 VISIBLE과 INVISIBLE을 통해 필요에 따라 해당 기능이 보이도록, 안보이도록 하였다.
  • 각 버튼이 클릭 되었을 때 해당 기능들이 실행 되도록 하였다.
  • 항목이 입력 받았을 때, 이 메모에 대한 항목들을 해당 년도, 날짜를 변수명으로 입력받아, 이 해당 날짜에 대한 파일을 생성하여 해당 파일에 저장되도록 하였다.
  • try, catch 문을 이용하여, 해당 파일의 output, input이 용이 하도록 하였다.
728x90