이번 시간에는 해당 월에 따른 날짜를 보여주는
방법을 알아보겠습니다.
이전 포스팅은 아래 링크를 들어가시면 됩니다.
2022.04.20 - [안드로이드] - [안드로이드] 커스텀 달력 만드는 방법 part2 이번 달, 저번 달, 다음 달 구현
- 설명 -
텍스트뷰에 날짜가 들어갑니다.
<?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="50dp"
android:orientation="vertical"
android:padding="8dp">
<TextView
android:id="@+id/dayText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="1"
android:textSize="25sp"
android:textStyle="bold"/>
</LinearLayout>
2022.01.01 - [안드로이드] - [안드로이드 스튜디오] 레이아웃 추가하는 방법
- 설명 -
화면과 데이터를 연결해주는 클래스입니다.
1. onCreateViewHolder: 화면을 연결해주는 메서드
2. onBindViewHolder: 데이터를 연결해주는 메서드
public class CalendarAdapter extends RecyclerView.Adapter<CalendarAdapter.CalendarViewHolder>{
ArrayList<String> dayList;
public CalendarAdapter(ArrayList<String> dayList) {
this.dayList = dayList;
}
@NonNull
@Override
public CalendarViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View view = inflater.inflate(R.layout.calendar_cell, parent, false);
return new CalendarViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull CalendarViewHolder holder, int position) {
//날짜 적용
holder.dayText.setText(dayList.get(position));
}
@Override
public int getItemCount() {
return dayList.size();
}
class CalendarViewHolder extends RecyclerView.ViewHolder{
//초기화
TextView dayText;
public CalendarViewHolder(@NonNull View itemView) {
super(itemView);
dayText = itemView.findViewById(R.id.dayText);
}
}
}
2021.12.31 - [안드로이드] - [안드로이드 스튜디오] 자바 클래스 생성하는 방법
- 수정 및 추가 -
1. RecyclerView 객체 생성(추가)
RecyclerView recyclerView;
2. RecyclerView 초기화(추가)
recyclerView = findViewById(R.id.recyclerView);
3. 날짜 생성 메서드 (추가)
private ArrayList<String> daysInMonthArray(LocalDate date){
ArrayList<String> dayList = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);
//해당 월 마지막 날짜 가져오기(예: 28,30,31)
int lastDay = yearMonth.lengthOfMonth();
//해당 월의 첫번째 날 가져오기(예: 4월1일)
LocalDate firstDay = selectedDate.withDayOfMonth(1);
//첫번째 날 요일 가져오기 (월: 1 , 일: 7)
int dayOfWeek = firstDay.getDayOfWeek().getValue();
for(int i = 1; i < 42; i++){
if(i <= dayOfWeek || i > lastDay + dayOfWeek){
dayList.add("");
}else{
dayList.add(String.valueOf(i - dayOfWeek));
}
}
return dayList;
}
4. 화면 설정 메서드(수정)
private void setMonthView(){
//년월 텍스트뷰 셋팅
monthYearText.setText(monthYearFromDate(selectedDate));
ArrayList<String> dayList = daysInMonthArray(selectedDate);
CalendarAdapter adapter = new CalendarAdapter(dayList);
//레이아웃 설정( 열 7개)
RecyclerView.LayoutManager manager = new GridLayoutManager(getApplicationContext(), 7);
//레이아웃 적용
recyclerView.setLayoutManager(manager);
//어뎁터 적용
recyclerView.setAdapter(adapter);
}
5. 전체 코드
public class MainActivity extends AppCompatActivity {
TextView monthYearText; //년월 텍스트뷰
LocalDate selectedDate; //년월 변수
RecyclerView recyclerView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//초기화
monthYearText = findViewById(R.id.monthYearText);
ImageButton preBtn = findViewById(R.id.pre_btn);
ImageButton nextBtn = findViewById(R.id.next_btn);
recyclerView = findViewById(R.id.recyclerView);
//현재 날짜
selectedDate = LocalDate.now();
//화면 설정
setMonthView();
//이전 달 버튼 이벤트
preBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//-1한 월을 넣어준다. (2월 -> 1월)
selectedDate = selectedDate.minusMonths(1);
setMonthView();
}
});
//다음 달 버튼 이벤트
nextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//+1한 월을 넣어준다.(2월 -> 3월)
selectedDate = selectedDate.plusMonths(1);
setMonthView();
}
});
}//onCreate
//날짜 타입 설정
private String monthYearFromDate(LocalDate date){
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM월 yyyy");
return date.format(formatter);
}
//화면 설정
private void setMonthView(){
//년월 텍스트뷰 셋팅
monthYearText.setText(monthYearFromDate(selectedDate));
ArrayList<String> dayList = daysInMonthArray(selectedDate);
CalendarAdapter adapter = new CalendarAdapter(dayList);
//레이아웃 설정( 열 7개)
RecyclerView.LayoutManager manager = new GridLayoutManager(getApplicationContext(), 7);
//레이아웃 적용
recyclerView.setLayoutManager(manager);
//어뎁터 적용
recyclerView.setAdapter(adapter);
}
private ArrayList<String> daysInMonthArray(LocalDate date){
ArrayList<String> dayList = new ArrayList<>();
YearMonth yearMonth = YearMonth.from(date);
//해당 월 마지막 날짜 가져오기(예: 28,30,31)
int lastDay = yearMonth.lengthOfMonth();
//해당 월의 첫번째 날 가져오기(예: 4월1일)
LocalDate firstDay = selectedDate.withDayOfMonth(1);
//첫번째 날 요일 가져오기 (월: 1 , 일: 7)
int dayOfWeek = firstDay.getDayOfWeek().getValue();
for(int i = 1; i < 42; i++){
if(i <= dayOfWeek || i > lastDay + dayOfWeek){
dayList.add("");
}else{
dayList.add(String.valueOf(i - dayOfWeek));
}
}
return dayList;
}
}//MainActivity
2022.04.18 - [안드로이드] - [안드로이드] 기본 카메라 사진 찍고 이미지 뷰에 보여주는 방법(StartActivityForResult deprecated 해결방법)
[안드로이드] 커스텀 달력 만드는 방법 part5 인터페이스 없이 클릭 이벤트 만들기 (0) | 2022.04.23 |
---|---|
[안드로이드] 커스텀 달력 만드는 방법 part4 토요일 일요일 색상지정 및 날짜 클릭 이벤트 (2) | 2022.04.22 |
[안드로이드] 커스텀 달력 만드는 방법 part2 이번 달, 저번 달, 다음 달 구현 (6) | 2022.04.20 |
[안드로이드] 커스텀 달력 만드는 방법 part1 화면 구성 (0) | 2022.04.19 |
[안드로이드] 기본 카메라 사진 찍고 이미지뷰에 보여주는 방법(StartActivityForResult deprecated 해결방법) (0) | 2022.04.18 |
댓글 영역