안드로이드 일기예보 - 달력 보기

달력 보기 기능은 기본적으로 현재 연월일을 표시하며, 회색 배경에 오늘 날짜는 검은색 글꼴로, 이번 달의 다른 날짜는 흰색 글꼴로, 월이 아닌 날짜는 회색 글꼴로 표시됩니다. 사용자는 관련 버튼을 클릭하거나 왼쪽이나 오른쪽으로 밀어 달력을 뒤집을 수 있습니다. 구체적인 작업 과정이 그림에 나와 있습니다.

달력 기능을 구현하기 위해서는 먼저 일일 정보를 저장하는 DayBean 클래스를 새로 생성해야 하며, 코드는 그림 3-27과 같다.

그림 3- 27 데이빈

그런 다음 인터페이스에 달력 정보를 표시하도록 어댑터를 사용자 정의합니다. BaseAdapter를 상속하는 새로운 클래스 DayAdapter를 생성합니다. 코드는 그림 3-28에 나와 있습니다.

그림 3- 28 DayAdapte

이 어댑터에서 getView()는 달력 인터페이스 정보의 표시 모드를 관리하는 주요 함수입니다. 구체적인 구현은 그림 3-29에 나와 있습니다.

그림 3- 29 getView()

위의 두 클래스 생성을 완료한 후 캘린더 인터페이스 Activity_day를 디자인합니다. ListView는 단일 열과 여러 행을 표시하므로 이 기능은 도시 정보를 표시하는 데 유용하지만 달력을 표시하는 데는 적합하지 않습니다. 따라서 레이아웃의 달력은 여러 개의 행과 열을 메쉬 형태로 표시할 수 있는 GridView를 사용합니다. 레이아웃이 완성되면 새로운 Day 클래스를 생성하고 그 안에 달력과 관련된 디자인을 연결한다.코드는 그림 3-30과 같다.

그림 3- 30일

updateAdapter()는 캘린더 정보 표시의 핵심입니다. 디자인상의 달력 표시 방식은 6행 7열로 총 42개의 날짜를 표시하는데, 즉 달력에는 당월의 정보뿐만 아니라 전월과 다음달의 일부 날짜도 표시됩니다. 매월 날짜를 달력의 해당 위치에 넣는 것이 updateAdapter()가 원하는 것입니다.

달력에는 1월부터 12월까지 몇 가지 중요한 문제가 있는데, 디자인된 달력이 상식에 부합하는지 확인하기 위해 일반적으로 사용되는 달력 개체인 Calendar를 디자인에 사용하여 시간을 동적으로 설정하고 중요한 문제를 효과적으로 해결합니다.

updateAdapter()에서는 먼저 setCurrentData()를 사용하여 현재 시간을 초기 시간으로 설정한 다음 set()을 사용하여 당월 1일의 요일을 알 수 있습니다. 이때, 주의 인덱스는 1~7로 각각 일요일, 월요일~토요일에 해당하며, 연산의 편의를 위해 획득한 인덱스 번호를 1씩 줄여서 0~6은 일요일, 월요일~토요일에 해당한다. 각각 토요일. 그림 3-31을 참조하십시오.

그림 3- 31 updateAdapter()의 초기 부분

쿼리를 시작하면 지난 달의 날짜가 이번 달의 날짜와 함께 표시됩니다. 그림 3-32와 같습니다.

그림 3- 32 updateAdapter()는 지난달 정보를 조회합니다.

먼저 set()은 날짜를 이전 달로 설정하는데, Calendar의 월은 각각 1월~12월에 해당하는 0~11을 반환하므로 다른 정보의 반환 값은 실제 상황과 일치하므로 사용 시 상황이 다릅니다. 해당 달의 인덱스 번호 다양한 치료법. 여기서 get()은 이번 달의 인덱스 번호를 반환한 후, 1을 빼면 전월에 해당하는 인덱스 번호를 구한다. 예를 들어 이번 달이 11월이면 반환되는 인덱스 번호는 10이고 인덱스 번호는 1만큼 감소하여 9가 됩니다. Calendar 객체의 규칙에 따르면 인덱스 번호 9는 10월에 해당합니다. 이번 달 이전 달

그런 다음 이전 달의 월과 연도를 사용자 정의 getMonth()에 전달하여 지난 달의 일 수를 가져옵니다. 이전 단계에서 시간이 지난 달로 설정되었기 때문에 get()은 지난 달의 인덱스 번호를 반환하는데, 규칙에 따라 이 숫자에 1을 더하면 실제 지난 달의 번호가 됩니다. 이전 예를 계속하면 여기서 현재 달은 set() 이후 10월이 되고 해당 인덱스 번호는 9입니다. getMonth() 호출 시 인덱스 번호 9가 아닌 월 번호 10을 전달해야 하므로 get()에서 얻은 인덱스 번호에 1을 추가해야 합니다.

마지막으로 이번 달 1일의 주 위치와 전월의 일수를 결정한 후 for 루프를 사용하여 지난 달의 마지막 며칠을 이번 달 1일 이전의 위치와 채워질 때까지 일치시킵니다. . 여기서는 앞서 설정한 DayBean 클래스를 이용하여 정보를 저장하고, 지난 달 이번 달 달력에 나타날 날짜 정보를 하나씩 빈에 저장하고, 마지막으로 해당 빈을 dataList에 저장하면 된다.

지난 달의 날짜를 이번 달에 표시한 후 이번 달의 날짜를 달력의 위치와 일치시키기 시작합니다. 그림 3-33과 같습니다.

그림 3- 33 updateAdapter()는 이번달 정보를 조회합니다.

먼저 set()은 시간을 이번 달로 다시 설정하는데, 지난 달 정보를 조회할 때 그 달은 이전 달로 설정되었기 때문에 get()에서 반환된 인덱스 번호에 1을 더한 값이 이번 달의 인덱스 번호가 된다. 그런 다음 getMonth()를 호출하여 이번 달의 일수를 가져옵니다. 이때 get()으로 얻은 인덱스 번호가 이번 달에 해당하는 인덱스 번호이므로 1을 더하면 이번 달의 개월 수가 됩니다. 다음 작업은 이전 달의 날짜를 쿼리하는 것과 유사합니다. 단, 이 단계에서는 getFormatTime()을 호출하여 실제 연도, 월, 일 정보 nowDate와 현재 달력에 표시된 연도 및 월 정보를 얻어야 합니다. 소프트웨어에서 데이터를 선택한 다음 실제 연도를 비교합니다. 소프트웨어에 표시된 월과 연도가 동일한지 여부는 소프트웨어가 현재 표시하는 정보 중 하루가 실제 날짜이고 setCurrentDay가 일치한다는 의미입니다. () 매개변수는 현재 true입니다. 보충 설명으로 setCurrentDay()와 setCurrentMonth()는 모두 DayBean 클래스에 설정되는 함수인데, 이들에 true와 false를 전달하면 처리되는 날짜가 실제 현재 월, 일인지 판단할 수 있다. 최종 달력에서는 이 달의 오늘 날짜, 이번 달의 다른 날, 월이 아닌 날짜의 표시 방법이 이 두 가지에 의해 결정됩니다.

위의 연산을 통해 달력에서 전월과 이번달의 관련 정보를 결정하고, 남은 날짜 공석은 다음 달의 날짜로 채워지며, 구체적인 연산은 전월을 조회하는 것과 유사하다. 규칙의 월 수와 인덱스는 다음과 같습니다. 조작의 편의를 위한 숫자와 주 인덱스 번호의 변경 사이의 관계는 그림 3-34에 나와 있습니다.

그림 3- 34 updateAdapter()는 다음 달 정보를 조회합니다.

위의 세 가지 쿼리가 완료된 후, informDataSetChanged()를 사용하여 Day의 어댑터 initAdapter()에 데이터 업데이트를 알리고, set()을 사용하여 날짜를 당월로 설정합니다. 그림 3-35와 같습니다.

그림 3- 35 updateAdapter()의 끝

위는 달력 정보 표시를 제어하기 위한 updateAdapter()의 구현 메소드이며, 해당 Day에 정의된 다른 함수는 그림 3-36과 같습니다.

그림 3-36 Day의 나머지 기능

 

Je suppose que tu aimes

Origine blog.csdn.net/weixin_58963766/article/details/130567736
conseillé
Classement