要解决Android日期选择器无法滚动超过2100年的问题,你可以自定义日期选择器并设置其范围。
首先,创建一个继承自DatePickerDialog的自定义日期选择器类,例如CustomDatePickerDialog:
import android.app.DatePickerDialog;
import android.content.Context;
import android.widget.DatePicker;
import java.lang.reflect.Field;
public class CustomDatePickerDialog extends DatePickerDialog {
private static final int MAX_YEAR = 2100; // 设置日期选择器的最大年份
public CustomDatePickerDialog(Context context, OnDateSetListener listener, int year, int month, int dayOfMonth) {
super(context, listener, year, month, dayOfMonth);
fixDatePicker();
}
private void fixDatePicker() {
try {
Field datePickerField = DatePickerDialog.class.getDeclaredField("mDatePicker");
datePickerField.setAccessible(true);
DatePicker datePicker = (DatePicker) datePickerField.get(this);
Field mYearSpinnerField = DatePicker.class.getDeclaredField("mYearSpinner");
mYearSpinnerField.setAccessible(true);
Object yearPicker = mYearSpinnerField.get(datePicker);
Class> yearPickerClass = yearPicker.getClass();
Field yearField = yearPickerClass.getDeclaredField("mYearPicker");
yearField.setAccessible(true);
Object yearPicker2 = yearField.get(yearPicker);
Class> yearPickerClass2 = yearPicker2.getClass();
Field currentField = yearPickerClass2.getDeclaredField("mCurrent");
currentField.setAccessible(true);
currentField.set(yearPicker2, MAX_YEAR);
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后,在你的Activity或Fragment中使用自定义日期选择器类来创建日期选择器对话框:
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Calendar;
public class MainActivity extends AppCompatActivity {
private Button btnOpenDatePicker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOpenDatePicker = findViewById(R.id.btn_open_date_picker);
btnOpenDatePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
openCustomDatePicker();
}
});
}
private void openCustomDatePicker() {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
CustomDatePickerDialog datePickerDialog = new CustomDatePickerDialog(this, new CustomDatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
// 处理选中的日期
Toast.makeText(MainActivity.this, "选择的日期:" + year + "-" + (month + 1) + "-" + dayOfMonth, Toast.LENGTH_SHORT).show();
}
}, year, month, dayOfMonth);
datePickerDialog.show();
}
}
这样,你就可以使用自定义日期选择器打开一个日期选择对话框,其年份范围可以滚动超过2100年。