android spinner 自定义_自定义系列:日期对话框

本文介绍如何将原来日历表的形式改为滑动形式,设计自己的自定义风格日期选择,总的分为对话框布局页面+对应的对话框代码+活动的引用

一、对话框布局页面

主要的控件DatePicker如下:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center">
    <DatePicker
        android:id="@+id/dp_sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:calendarViewShown="false"
        android:spinnersShown="true"
        android:datePickerMode="spinner"/>
</LinearLayout>

二、对应的对话框代码

构造函数+年月日和变更器+对话框显示与关闭+日期变更监听器接口

2.1 构造函数

public Datedialog(Context context){
    //绑定布局页面及控件
    view = LayoutInflater.from(context).inflate(R.layout.datedialog,null);
    btn_choosedate = (Button)view.findViewById(R.id.btn_choosedate);
    dp_sp = (DatePicker)view.findViewById(R.id.dp_sp);
    dl_date = new Dialog(context,R.style.CustomDateDialog);
    btn_choosedate.setOnClickListener(this);
}

用于页面绑定、控件绑定、风格设置等。其中对话框页面风格如下:

<style name="CustomDateDialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowFrame">@null</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowBackground">#CCDDCC</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

2.2 定义日期变更监听器接口

public interface myDateSetListener{
    void myDateSet(int year,int month,int day);
}

2.3 设置年月日和变更器

private myDateSetListener listener;
//设置日期对话框内部的年月日以及日期变更监听器
public void setDate(int year, int month, int day, myDateSetListener mlistener){
    dp_sp.init(year,month,day,null);
    listener = mlistener;
}

2.4 对话框的显示与关闭

public void showDialog(){
    //设置对话框窗口视图
    dl_date.getWindow().setContentView(view);
    //设置对话框窗口布局
    dl_date.getWindow().setLayout(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    //显示
    dl_date.show();
}
//关闭对话框
public void dismissDialog(){
    if(dl_date!=null&& dl_date.isShowing()){
        dl_date.dismiss();
    }
}

2.5 点击确认按钮后的响应

@Override
public void onClick(View v){
    if(v.getId()==R.id.btn_choosedate){
        dismissDialog();
        if(listener!=null){
            dp_sp.clearFocus();
            //回调监听器的myDateSet()
            listener.myDateSet(dp_sp.getYear(),dp_sp.getMonth()+1,dp_sp.getDayOfMonth());
        }
    }
}

三、活动的引用

3.1 定义日期变更监听器实现自定义的变更器接口

//定义日期变更监听器实现自定义的变更器接口
class myDateListener implements Datedialog.myDateSetListener{
    @Override
    public void myDateSet(int year,int month,int day){
        tv_date.setText(String.format("%d年%d月%d日",year,month,day));
    }
}

3.2 自定义日期对话框

//自定义日期对话框
public void showDateDialog(){
    Calendar calendar = Calendar.getInstance();
    Datedialog datedialog = new Datedialog(this);
    //设置日期对话框的年月日,指定日期变更器
    datedialog.setDate(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(Calendar.DAY_OF_MONTH),new myDateListener());
    datedialog.showDialog();
}

四、实现效果

v2-2b66ce3c925bceb5cb2876ec932387da_b.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值