用Spinner做出日期的选择下拉框

首先在layout.xml文件中加入三个Spinner与三个Textveiw

三个Textview分别显示年月日;

 
    
            

            
            
            
            
            
    

 

然后得写Spinner的item的样式也就是下拉选项的样式(由于我的andorid支持的包是7.0以上 所以单独写textview就好了不需要加layout布局 不然会报错)


接着 新建一个 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 year;
// 声明 用来储存年份的list    表示数据类型
    private List month;
//同上
    private List day;
//同上
    private ArrayAdapter yearadapter;
    private ArrayAdapter monthadapter;
    private ArrayAdapter 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();//给列表分配空间
        for (int i = 1949; i <= 2050; i++) {//把年份的选项加入year列表中;
            year.add(i);
        }
    
        dateData = new DateData();//给年份处理的对象分配空间
        //this 表示上下文 
        yearadapter = new ArrayAdapter(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();//给month列表分配空间
        for (int i = 1; i <= 12; i++) {
            month.add(i);//给month添加数据 1-12个月
        }
        //接下来和上面年份的一样
        monthadapter = new ArrayAdapter(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();
                for (int i = 1; i <= theday; i++) {
                    day.add(i);
                }
                datadapter = new ArrayAdapter(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天

我的是用真机测试的所以就不发图片了

 

你可能感兴趣的:(用Spinner做出日期的选择下拉框)