天天看點

日期選擇器DatePicker,對話框選擇

今天下了個需求網上找了一下發現了DatePicker選擇器感覺比較好用:那是廢話不多說直接上代碼。

首先呢我沒有做任何修改樣式,直接定義一個自定義對話框:(不會自定義對話框的找我前面的文章有介紹dialog)

在resi啊的layout裡面建立xml檔案dialog_date(直接複制拿去用)

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <DatePicker
        android:id="@+id/datePicker"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:calendarViewShown="false"
        android:endYear="2027"
        android:startYear="2007" />
</LinearLayout>
           
然後在你所需要的頁面直接封裝方法:(或者直接寫不怕亂的情況)      
//目前年
    private int years;
    //目前月
    private int month;
    //目前日
    private int day;
private void riqixuanze(){
        years = DataTime.getInstance().year();
        month = DataTime.getInstance().month();
        day = DataTime.getInstance().day();
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setPositiveButton("設定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                設定年的控件.setText(years +"");
                設定月的控件.setText(month+"");
                設定日的控件.setText(day +"");
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                ToastShow.show(ShipmentTallyRecord.this,"您沒有選中日期");
                dialog.dismiss();
            }
        });
        final AlertDialog dialog = builder.create();
        View dialogView = View.inflate(this, R.layout.dialog_date, null);
        final DatePicker datePicker = (DatePicker) dialogView.findViewById(R.id.datePicker);
        dialog.setTitle("設定日期");
        dialog.setView(dialogView);
        dialog.show();
        //初始化日期監聽事件這是月的時候需要-1
        datePicker.init(years, month - 1, day, new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                years=year;
                //擷取月份的時候需要+1
                month=monthOfYear+1;
                day=dayOfMonth;
            }
        });
    }
           

然後你會發現,this爆紅寫你自己的類名.this就行了,你還發現時間類都是報錯了

那麼我在送你一個我自己封裝的時間類上代碼:

public class DataTime {
    private static Calendar c;
    private static DataTime dataTime;
    private int year;
    private int month;
    private int day;
    private int hour;
    private int minute;

    private DataTime(){
        c = Calendar.getInstance();
    }
    public static DataTime getInstance(){
        if(dataTime == null){
            synchronized (DataTime.class){
                if(dataTime == null) {
                    dataTime=new DataTime();
                }
            }
        }
        return dataTime;
    }
    //年
    public int year(){
        year = c.get(Calendar.YEAR);
        return year;
    }
    //月
    public int month(){
        month = c.get(Calendar.MONTH);
        return month+1;
    }
    //日
    public int day(){
        day = c.get(Calendar.DAY_OF_MONTH);
        return day;
    }
    //小時
    public int hour(){
        hour = c.get(Calendar.HOUR_OF_DAY);
        return hour;
    }
    //分鐘
    public int minute(){
        minute = c.get(Calendar.MINUTE);
        return minute;
    }
    public String nyr(){
        int years = year();
        int months = month();
        int days = day();
        String s= years +"-"+ months+"-"+ days;
        return s;
    }
//    目前時間
    public String doingshijan(){
        String s;
        String monthss;
        String dayss;
        String hours;
        String minutes;
        int years = year();
        int months = month();
        if(months>=10){
            monthss=months+"";
        }else{
            monthss="0"+months;
        }
        int days = day();
        if(days>=10){
            dayss=days+"";
        }else{
            dayss="0"+days;
        }
        int hour = hour();
        if(hour>=10){
            hours=hour+"";
        }else{
            hours="0"+hour;
        }
        int minute = minute();
        if(minute>=10){
            minutes=minute+"";
        }else{
            minutes="0"+minute;
        }
        s=years +"-"+ monthss+"-"+ dayss+" "+hours+":"+minutes;
        return s;
    }
}
           

這樣就OK了。友情提示盡量把時間選擇調用的方法放在監聽裡面,當dialog用。

歡迎新手采納借鑒,歡迎大佬指點。