因为工作功能需求,自定义一个日历,效果如下,点击选中日历

77791018b4330782c59999671b504bde.png

使用github上面一个前辈的框架

implementation 'com.necer.ncalendar:ncalendar:5.0.0'

implementation 'com.github.CodingEnding:PopupLayout:v1.0'//poplayout

框架使用基本类型地址,大家可以根据需要学习修改:地址

自定义日历的xml文件

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="wrap_content"

tools:context=".CalendarActivity">

android:id="@+id/title_bar"

android:layout_width="320dp"

android:layout_height="40dp"

android:background="@drawable/calendar_bg"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toTopOf="parent" />

android:id="@+id/year"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginStart="18dp"

android:text="2018"

android:textColor="#ffffff"

android:textSize="16sp"

app:layout_constraintBottom_toBottomOf="@id/title_bar"

app:layout_constraintStart_toStartOf="@id/title_bar"

app:layout_constraintTop_toTopOf="@id/title_bar" />

android:id="@+id/month"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_marginStart="18dp"

android:text="四"

android:textColor="#ffffff"

android:textSize="18sp"

app:layout_constraintBottom_toBottomOf="@id/title_bar"

app:layout_constraintEnd_toEndOf="@id/title_bar"

app:layout_constraintStart_toStartOf="@id/title_bar"

app:layout_constraintTop_toTopOf="@id/title_bar" />

android:id="@+id/monthName"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="月"

android:textColor="#ffffff"

android:textSize="18sp"

app:layout_constraintBottom_toBottomOf="@id/title_bar"

app:layout_constraintStart_toEndOf="@id/month"

app:layout_constraintTop_toTopOf="@id/title_bar" />

android:id="@+id/week"

android:layout_width="320dp"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@id/title_bar" />

android:id="@+id/month_calendar"

android:layout_width="320dp"

android:layout_height="280dp"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@id/week" />

android:id="@+id/bottom_view"

android:layout_width="320dp"

android:layout_height="40dp"

android:background="@drawable/calendar_bg_bottom"

app:layout_constraintEnd_toEndOf="parent"

app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@id/month_calendar" />

android:id="@+id/lastYear"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:gravity="center"

android:onClick="lastYear"

android:text="上一年"

android:textColor="#ffffff"

app:layout_constraintBottom_toBottomOf="@id/bottom_view"

app:layout_constraintEnd_toStartOf="@id/dividerOne"

app:layout_constraintStart_toStartOf="@id/bottom_view"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/dividerOne"

android:layout_width="1dp"

android:layout_height="40dp"

android:background="#ffffff"

app:layout_constraintEnd_toStartOf="@id/lastMonth"

app:layout_constraintStart_toEndOf="@id/lastYear"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/lastMonth"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:gravity="center"

android:onClick="lastMonth"

android:text="上个月"

android:textColor="#ffffff"

app:layout_constraintBottom_toBottomOf="@id/bottom_view"

app:layout_constraintEnd_toStartOf="@id/dividerTwo"

app:layout_constraintStart_toEndOf="@id/dividerOne"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/dividerTwo"

android:layout_width="1dp"

android:layout_height="40dp"

android:background="#ffffff"

app:layout_constraintEnd_toStartOf="@id/nextMonth"

app:layout_constraintStart_toEndOf="@id/lastMonth"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/nextMonth"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:gravity="center"

android:text="下个月"

android:textColor="#ffffff"

android:onClick="nextMonth"

app:layout_constraintBottom_toBottomOf="@id/bottom_view"

app:layout_constraintEnd_toStartOf="@id/dividerThree"

app:layout_constraintStart_toEndOf="@id/dividerTwo"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/dividerThree"

android:layout_width="1dp"

android:layout_height="40dp"

android:background="#ffffff"

app:layout_constraintEnd_toStartOf="@id/nextYear"

app:layout_constraintStart_toEndOf="@id/nextMonth"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

android:id="@+id/nextYear"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:gravity="center"

android:text="下一年"

android:textColor="#ffffff"

android:onClick="nextYear"

app:layout_constraintBottom_toBottomOf="@id/bottom_view"

app:layout_constraintEnd_toEndOf="@id/bottom_view"

app:layout_constraintStart_toEndOf="@id/dividerThree"

app:layout_constraintTop_toTopOf="@id/bottom_view" />

MainActivity,日历的功能重写也是在和这个函数中

package com.example.calendartest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;

import android.os.Handler;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;

import com.codingending.popuplayout.PopupLayout;

import com.necer.calendar.BaseCalendar;

import com.necer.calendar.MonthCalendar;

import com.necer.enumeration.CheckModel;

import com.necer.enumeration.DateChangeBehavior;

import com.necer.listener.OnCalendarChangedListener;

import org.joda.time.LocalDate;

public class MainActivity extends AppCompatActivity {

PopupLayout popupLayout;

View calendarView;

TextView mYear, mMonth, lastYear, nextYear, lastMonth, nextMonth;

MonthCalendar monthCalendar;

int currentYear, currentMonth;

Button intent;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

intent = findViewById(R.id.intent);

calendarView = View.inflate(this, R.layout.calendar, null);

popupLayout = PopupLayout.init(this, calendarView);

}

public void intent(View view) {

initCalendar();

popupLayout.show(PopupLayout.POSITION_CENTER);

}

public void initCalendar() {

monthCalendar = calendarView.findViewById(R.id.month_calendar);

mYear = calendarView.findViewById(R.id.year);

mMonth = calendarView.findViewById(R.id.month);

lastYear = calendarView.findViewById(R.id.lastYear);

nextYear = calendarView.findViewById(R.id.nextYear);

lastMonth = calendarView.findViewById(R.id.lastMonth);

nextMonth = calendarView.findViewById(R.id.nextMonth);

monthCalendar.setCheckMode(CheckModel.SINGLE_DEFAULT_UNCHECKED);

monthCalendar.setOnCalendarChangedListener(new OnCalendarChangedListener() {

@Override

public void onCalendarChange(BaseCalendar baseCalendar, int year, int month, LocalDate localDate, DateChangeBehavior dateChangeBehavior) {

mYear.setText(String.valueOf(year));

mMonth.setText(String.valueOf(month));

intent.setText(String.valueOf(localDate));

currentYear = year;

currentMonth = month;

new Handler().postDelayed(new Runnable() {

@Override

public void run() {

popupLayout.dismiss();

}

},800);

}

});

}

public void lastMonth(View view) {

monthCalendar.toLastPager();

}

public void nextMonth(View view) {

monthCalendar.toNextPager();

}

public void nextYear(View view) {

monthCalendar.jumpDate(currentYear + 1, currentMonth, 1);

}

public void lastYear(View view) {

monthCalendar.jumpDate(currentYear - 1, currentMonth, 1);

}

}

GitHub下载地址

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐