写一个用Android 的日历源码
时间: 2023-11-12 08:06:06 浏览: 38
好的,下面是一个简单的 Android 日历应用的源代码示例,你可以参考它来编写你自己的应用:
首先是布局文件 activity_main.xml,用来显示日历和日期选择器:
```xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 日历 -->
<com.example.calendarview.CalendarView
android:id="@+id/calendar_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp" />
<!-- 日期选择器 -->
<NumberPicker
android:id="@+id/date_picker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/calendar_view"
android:layout_centerHorizontal="true" />
</RelativeLayout>
```
接下来是 CalendarView.java 文件,实现了日历的显示和点击事件:
```java
public class CalendarView extends GridView {
private static final int DAYS_COUNT = 42;
private Context mContext;
private Calendar mCalendar;
private CalendarAdapter mAdapter;
public CalendarView(Context context, AttributeSet attrs) {
super(context, attrs);
mContext = context;
mCalendar = Calendar.getInstance();
mAdapter = new CalendarAdapter(mContext, mCalendar);
setAdapter(mAdapter);
setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// 处理点击事件
mAdapter.setSelected(position);
mAdapter.notifyDataSetChanged();
}
});
}
private class CalendarAdapter extends BaseAdapter {
private LayoutInflater mInflater;
private Calendar mCalendar;
private int mSelectedPosition;
public CalendarAdapter(Context context, Calendar calendar) {
mInflater = LayoutInflater.from(context);
mCalendar = calendar;
mSelectedPosition = -1;
}
public void setSelected(int position) {
mSelectedPosition = position;
}
@Override
public int getCount() {
return DAYS_COUNT;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = mInflater.inflate(R.layout.calendar_item, parent, false);
}
TextView textView = (TextView) convertView.findViewById(R.id.calendar_text);
int day = position - mCalendar.get(Calendar.DAY_OF_WEEK) + 2;
if (day < 1 || day > mCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)) {
textView.setText("");
} else {
textView.setText(String.valueOf(day));
}
if (position == mSelectedPosition) {
textView.setTextColor(Color.RED);
} else {
textView.setTextColor(Color.BLACK);
}
return convertView;
}
}
}
```
接下来是 calendar_item.xml 文件,用来显示日历中的每一天:
```xml
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/calendar_text"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="20sp" />
```
最后是 MainActivity.java 文件,实现了日期选择器的显示和选择事件:
```java
public class MainActivity extends AppCompatActivity {
private CalendarView mCalendarView;
private NumberPicker mDatePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mCalendarView = (CalendarView) findViewById(R.id.calendar_view);
mDatePicker = (NumberPicker) findViewById(R.id.date_picker);
mDatePicker.setMinValue(1);
mDatePicker.setMaxValue(31);
mDatePicker.setValue(1);
mDatePicker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() {
@Override
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
// 处理日期选择事件
mCalendarView.setSelection(newVal + mCalendarView.getFirstVisiblePosition() - 2);
}
});
}
}
```
这就是一个简单的 Android 日历应用的源代码示例,希望能对你有所帮助。