给我写一个android日历控件的demo
时间: 2023-12-12 07:04:10 浏览: 33
好的,以下是一个简单的Android日历控件的demo:
1. 在布局文件中添加日历控件:
```xml
<com.example.calendarview.CalendarView
android:id="@+id/calendar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
```
2. 创建一个CalendarView类,并继承自ViewGroup,实现日历控件的布局和初始化:
```java
public class CalendarView extends ViewGroup {
private Calendar calendar;
private int year, month, day;
private int selectedYear, selectedMonth, selectedDay;
private OnDateSelectedListener listener;
public CalendarView(Context context) {
super(context);
init();
}
public CalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public CalendarView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init() {
calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
selectedYear = year;
selectedMonth = month;
selectedDay = day;
setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showDatePicker();
}
});
}
private void showDatePicker() {
DatePickerDialog dialog = new DatePickerDialog(getContext(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
selectedYear = year;
selectedMonth = month;
selectedDay = dayOfMonth;
calendar.set(year, month, dayOfMonth);
if (listener != null) {
listener.onDateSelected(year, month, dayOfMonth);
}
invalidate();
}
}, year, month, day);
dialog.show();
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
// 布局日历控件的子View
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// 测量日历控件的宽高
}
public void setOnDateSelectedListener(OnDateSelectedListener listener) {
this.listener = listener;
}
public interface OnDateSelectedListener {
void onDateSelected(int year, int month, int day);
}
}
```
3. 在布局文件中添加一个TextView,用于显示选中的日期:
```xml
<TextView
android:id="@+id/date_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp" />
```
4. 在Activity中初始化日历控件和TextView,并设置日期选择监听器:
```java
public class MainActivity extends AppCompatActivity {
private CalendarView calendarView;
private TextView dateText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
calendarView = findViewById(R.id.calendar_view);
dateText = findViewById(R.id.date_text);
calendarView.setOnDateSelectedListener(new CalendarView.OnDateSelectedListener() {
@Override
public void onDateSelected(int year, int month, int day) {
dateText.setText(year + "-" + (month + 1) + "-" + day);
}
});
}
}
```
这样就完成了一个简单的Android日历控件的demo。当点击日历控件时,弹出DatePickerDialog供用户选择日期,选择完后更新界面并回调给监听器。