首先在layout.xml文件中加入三个Spinner与三个Textveiw
三个Textview分别显示年月日;
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:paddingLeft="10dp"
android:orientation="horizontal">
<Spinner
android:id="@+id/add_year_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Spinner>
<TextView
android:text="年"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Spinner
android:id="@+id/add_month_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Spinner>
<TextView
android:text="月"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Spinner
android:id="@+id/add_day_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></Spinner>
<TextView
android:text="日"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
然后得写Spinner的item的样式也就是下拉选项的样式(由于我的andorid支持的包是7.0以上 所以单独写textview就好了不需要加layout布局 不然会报错)
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="30dip"
android:minHeight="30dip" />
接着 新建一个 DateData的类用来处理平年闰年的2月的天数
public class DateData {
private int []month = {31,28,31,30,31,30,31,31,30,31,30,31};
private boolean leapryear;
public DateData(int year) {
if ((year % 100 == 0 && year % 400 == 0) || year % 4 == 0) {
leapryear= true;
} else leapryear= false;
if(primeryear)
month[1] = 29;
else
month[1] = 28;
}
public int getMonth(int i) {
return month[i];
}
}
接下来就是写Activity的类了
public class AddActivity extends AppCompatActivity {
private Spinner yearspinner;
private Spinner monthspinner;
private Spinner dayspinner;
private TextView textView;
//声明布局变量
private List<Integer> year;
// 声明 用来储存年份的list <Integer>表示数据类型
private List<Integer> month;
//同上
private List<Integer> day;
//同上
private ArrayAdapter<Integer> yearadapter;
private ArrayAdapter<Integer> monthadapter;
private ArrayAdapter<Integer> datadapter;
//定义年月日的适配器
private DateData dateData;
//声明 之前用来年份处理的DateData对象
private int theday;
//声明 int类型的theday
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.acivity_add);
yearspinner = findViewById(R.id.add_year_spinner);
monthspinner = findViewById(R.id.add_month_spinner);
dayspinner = findViewById(R.id.add_day_spinner);
//给布局对象分配id
year = new ArrayList<Integer>();//给列表分配空间
for (int i = 1949; i <= 2050; i++) {//把年份的选项加入year列表中;
year.add(i);
}
dateData = new DateData();//给年份处理的对象分配空间
//this 表示上下文
yearadapter = new ArrayAdapter<Integer>(this,android.R.layout.simple_spinner_item, year);//把年份的列表添加到适配器中 还有他的下拉选项
yearadapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);//
yearspinner.setAdapter(yearadapter);//把布局加入适配器 这边我们用默认布局
//给year的Spinner对象注册监听器
yearspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override//
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
dateData.Setyear(yearadapter.getItem(position));//用DateData对象来处理选中的年份
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
//这是未选中的时候 这里我们不写
}
});
month = new ArrayList<Integer>();//给month列表分配空间
for (int i = 1; i <= 12; i++) {
month.add(i);//给month添加数据 1-12个月
}
//接下来和上面年份的一样
monthadapter = new ArrayAdapter<Integer>(this, android.R.layout.simple_spinner_item, month);
monthadapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
monthspinner.setAdapter(monthadapter);
monthspinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
//从这里开始有点不同了 当选中月数后 我们才能给day的Spinner分配天数 毕竟有的月份天数不同 所以我们吧整个对day Spinner对象的处理全部放在 month Spinner被选中后的时间监听处理函数中
// 提取出当前月分的天数
theday = dateData.getMonth(position);
//这里和年份处理一样
day = new ArrayList<Integer>();
for (int i = 1; i <= theday; i++) {
day.add(i);
}
datadapter = new ArrayAdapter<Integer>(AddActivity.this, android.R.layout.simple_spinner_item, day);
datadapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
dayspinner.setAdapter(datadapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
这样我们测试 2000年的2月份是否有29天
我的是用真机测试的所以就不发图片了