촬리의늘솔길

H &Y Calendar 본문

✍~2022/app(android studio)

H &Y Calendar

리촬리 2021. 8. 11. 18:07

오늘은 캘린더 아이콘을 바꿔보았당 ㅎㅎ

 

 

바꾸는법은 쉽다. Manifest 파일에서

icon 옆에있는 사진 모양 누르고, Browse눌러서

+모양 누르고

'

 

사진따로 저장안해놔서 

import Drawable 눌러서 사진을 drawable파일에 연결해줬따.

 


그리고 오늘 추가하는 기능! 자꾸 시간 설정하는데 포맷을 작성하길래 이게 뭔가 궁금해서 쳐봤다.

 

 

안드로이드에서는 날짜와 시간을 포맷하는 Util이 들어있습니다. 여러 애플리케이션에서 현재 시간(10:22 PM)이나 상대시간(10 hours ago) 그리고 날짜 (2009-12-11) 과 같은 것을 해당 Locale과 사용자 세팅에 맞게 보여주어야 하는 경우가 많죠. 이럴때 Java의 DateFormat이나 Calendar등을 뒤지지 마시고 Android 에서 Util Class로 제공하니 가져다 쓰면 됩니다. 

출처: https://wsym.tistory.com/entry/안드로이드-날짜와-시간-포맷-Date-Time-Formatting [안드로이드 개발자 ]

 

안드로이드 날짜와 시간 포맷, Date & Time Formatting

안드로이드 날짜와 시간 포맷, Date & Time Formatting 회색 http://www.androidpub.com/40165 2009.11.11 20:17:55 11765 1 / 0 1 앱개발 안드로이드에서는 날짜와 시간을 포맷하는 Util이 들어있습니다. 여러..

wsym.tistory.com

 

 

그리고 자꾸 getter and setter 를 사용하는데 이게 뭘까?

객체 지향 프로그래밍에서 객체의 데이터는 객체 외부에서 직접적으로 접근하는것을 막는다. 

객체데이터를 외부에서 읽고 변경시 객체의 무결성이 깨질 수 있기 때문이다.

따라서 객체지향 프로그래밍에서는 메소드를 통해 데이터를 변경하는 방법을 선호한다.

데이터는 외부에서 접근하지 않도록 막고, 메소드는 공개해서 외부에서 메소드를 통해 데이터를 접근하도록 유도한다.

이런역할을 하는 메소드가 Setter 라고함.

 

 

외부에서객체의 데이터를 '읽을때도' 메소드를 사용하는것이 좋다.

객체 외부에서 객체 필드값을 사용하기 부적절한 경우가 있다. 이런경우 메소드로 필드값을 가공후, 외부로 전달한다. 이런역할을 하는 메소드가 Getter 

 

Getter/Setter 선언방식 (근데 어짜피 generate으로 삽입하면 되니까..)

 

 

 

자세한건 출처

 


ArrayList는 뭘까?

리스트의 일종인건 알겠는데, 자바를 안배워서 그런지 모르겠더라. 그래서 역시나 검색!

출처

Array = 집합체(모음, 무리), (메모리) 배열, 배열하다

List = 목록, 명단, 일람표, (특정 순서로) 열거하다

 

어떤 것에 담긴 것들의 명단, 어떤 것을 열거해놓은 것, 배열의 목록 등등 여러 뜻이라고 유추해볼 수 있다.

다음은 구글에선 뭐라고 나오는지 확인하자. 아래는 구글에 ArrayList를 검색한 결과를 요약한 것들이다.

 

  • ArrayList는 동적 크기의 요소 모음을 저장하는 데 사용된다. 크기가 고정된 배열과 달리, ArrayList는 새 요소가 추가될 때 자동으로 크기를 늘린다. 자바의 컬렉션 프레임워크의 일부고 List 인터페이스의 구현체다.
  • ArrayList는 내부적으로 배열을 사용해 요소를 저장한다. 배열과 마찬가지로 인덱스로 요소를 검색할 수 있다.
  • ArrayList는 크기를 조정할 수 있는 배열이다. ( 메모리가 허용하는 한 자동으로 ArrayList 크기는 동적으로 변경)

코드가 뭐가 잘못되었는지 어플 중지됨

 

 

비교해보니까, 이벤트리스트뷰를 아이디값 가져와서 선언을 안해줬었음 

저번에 잘못 지운듯

https://www.diffchecker.com/ 코드 비교사이트

결과:

 

 

따라하기만 했는데..그래도 앞에 배운게 도움은되어서 대~충 어떤구조인지는 이해는 됨 근데 분석해야할듯


배경음악 깔기

배웠던거 응용해서 MainActivity에 Mediaplayer변수 설정해서 추가해줌

버튼만들기에는 공간이 없어서 앱 나갈때 종료되게 

ondestroy ()해줌

package com.example.calendarviewexample;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.time.LocalDate;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;

import static com.example.calendarviewexample.CalendarUtils.daysInMonthArray;
import static com.example.calendarviewexample.CalendarUtils.monthYearFromDate;

public class MainActivity extends AppCompatActivity implements CalendarAdapter.OnItemListener
{
    MediaPlayer mediaPlayer;
    private TextView monthYearText;
    private RecyclerView calendarRecyclerView;


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

        mediaPlayer = MediaPlayer.create(this, R.raw.bgm);
        mediaPlayer.setLooping(true); //무한재생
        mediaPlayer.start();
        initWidgets();
        CalendarUtils.selectedDate = LocalDate.now();
        setMonthView();

    }



    private void initWidgets()
    {
        calendarRecyclerView = findViewById(R.id.calendarRecyclerView);
        monthYearText = findViewById(R.id.monthYearTV);
    }

    private void setMonthView()
    {
        monthYearText.setText(monthYearFromDate(CalendarUtils.selectedDate));
        ArrayList<LocalDate> daysInMonth = daysInMonthArray(CalendarUtils.selectedDate);

        CalendarAdapter calendarAdapter = new CalendarAdapter(daysInMonth, this);
        RecyclerView.LayoutManager layoutManager = new GridLayoutManager(getApplicationContext(), 7);
        calendarRecyclerView.setLayoutManager(layoutManager);
        calendarRecyclerView.setAdapter(calendarAdapter);
    }

    public void previousMonthAction(View view)
    {
        CalendarUtils.selectedDate = CalendarUtils.selectedDate.minusMonths(1);
        setMonthView();
    }

    public void nextMonthAction(View view)
    {
        CalendarUtils.selectedDate = CalendarUtils.selectedDate.plusMonths(1);
        setMonthView();
    }

    @Override
    public void onItemClick(int position, LocalDate date)
    {
        if(date != null)
        {
            CalendarUtils.selectedDate = date;
            setMonthView();
        }
    }

    public void weeklyAction(View view)
    {
        startActivity(new Intent(this, WeekViewActivity.class));
    }


    @Override
    protected void onDestroy() {
        super.onDestroy();
        mediaPlayer.stop();
    }
}

결과;

 

 

 

728x90