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

首先在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天

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

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值