android 日期选择器自由天数内展示

android 日期选择自定义popwindow实现90天内展示

日期选择器

android 可放入项目中直接使用、并可改变背景以及字体颜色等属性;

android 日期选择器自由天数内展示_第1张图片

#核心代码块

/** 取消订单弹窗 */
private void popReason(){
// 一个自定义的布局,作为显示的内容
View contentView = LayoutInflater.from(mactivity).inflate(R.layout.pop_dateselecter_details, null);
pop_showDatePicker = new PopWindow(contentView, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
pop_showDatePicker.setBackgroundDrawable(getResources().getDrawable(R.color.tming));
pop_showDatePicker.setTouchable(true);
pop_showDatePicker.setOutsideTouchable(true);
pop_showDatePicker.setFocusable(true);

    RelativeLayout rl_left,rl_right;
    ImageView left,right;
    TextView click;
    rl_left = contentView.findViewById(R.id.rl_left);
    rl_right = contentView.findViewById(R.id.rl_right);
    left = contentView.findViewById(R.id.iv_left);
    right = contentView.findViewById(R.id.iv_right);
    chooseYM = contentView.findViewById(R.id.tv_chooseYM);
    click = contentView.findViewById(R.id.tv_orther);
    mgv_date = (MyGridView) contentView.findViewById(R.id.mgv_date);

    right.setEnabled(false);

    mgv_date.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            TimeChooseInfo timeChooseInfo = (TimeChooseInfo) parent.getItemAtPosition(position);
            if(timeChooseInfo.isGray()){
                return;
            }
            chooseDay = timeChooseInfo.getDay();
            adapter_date.chooseindexYM = chooseyearmonth;
            adapter_date.refreshDate(listchangedate,chooseyearmonth, chooseDay);
            pop_showDatePicker.dismiss();
        }
    });

    rl_left.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            right.setEnabled(true);//开启右边点击
            right.setImageResource(R.mipmap.timegorighta);
            if(chooseOne >= listmonthday.size()-1){
                left.setEnabled(false);//关闭左边点击
                return;
            }
            chooseOne += 1;
            if(chooseOne == listmonthday.size()-1){//已到最左边
                left.setImageResource(R.mipmap.timegoleft);
            }else{
                left.setImageResource(R.mipmap.timegolefta);
            }
            listdate.clear();
            chooseyearmonth = listmonthday.get(chooseOne).substring(0,listmonthday.get(chooseOne).length()-3);
            chooseYM.setText(TextUtils.isEmpty(chooseyearmonth)?"****年**月":Utils.getTimeYM(chooseyearmonth));
            listdate.addAll(TimeUtils.getchooseDays(listmonthday.get(chooseOne)));
            changeListTime(0);
            adapter_date.refreshDate(listchangedate,chooseyearmonth,chooseDay);
        }
    });

    rl_right.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            left.setEnabled(true);
            left.setImageResource(R.mipmap.timegolefta);
            if(chooseOne <= 0){
                right.setEnabled(false);
                return;
            }
            chooseOne -= 1;
            if(chooseOne == 0){//已到最右边
                right.setImageResource(R.mipmap.timegoright);
            }else{
                right.setImageResource(R.mipmap.timegorighta);
            }
            listdate.clear();
            chooseyearmonth = listmonthday.get(chooseOne).substring(0,listmonthday.get(chooseOne).length()-3);
            chooseYM.setText(TextUtils.isEmpty(chooseyearmonth)?"****年**月":Utils.getTimeYM(chooseyearmonth));
            if(chooseOne == 0){
                listdate.addAll(TimeUtils.getchooseLastDays(listmonthday.get(chooseOne)));
            }else{
                listdate.addAll(TimeUtils.getchooseDays(listmonthday.get(chooseOne)));
            }
            if(chooseOne == 0){
                changeListTime(1);
            }else{
                changeListTime(0);
            }
            adapter_date.refreshDate(listchangedate,chooseyearmonth,chooseDay);
        }
    });

    click.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            pop_showDatePicker.dismiss();
        }
    });
}

#逻辑处理

/**
*
* 近多少天的日期
* @param maxShowDay
*/
private void getAdaptData(int maxShowDay){
listmonthday = TimeUtils.getDateList(maxShowDay);
Log.e(“shul”,listmonthday.size()+“个”);
if(listmonthday.size()>0){
chooseOne = 0;
chooseyearmonth = listmonthday.get(0).substring(0,listmonthday.get(0).length()-3);
chooseDay = listmonthday.get(0).substring(listmonthday.get(0).length()-2);
listdate = TimeUtils.getchooseLastDays(listmonthday.get(0));
changeListTime(1);
chooseYM.setText(TextUtils.isEmpty(chooseyearmonth)?"****年**月":Utils.getTimeYM(chooseyearmonth));
Utils.ShowLog(chooseyearmonth);
Utils.ShowLog(chooseDay);
}
if(adapter_date == null){
adapter_date = new DateChooseAdapter(mactivity,listchangedate,chooseyearmonth,chooseDay);
mgv_date.setAdapter(adapter_date);
}else{
adapter_date.refreshDate(listchangedate,chooseyearmonth,chooseDay);
}
}

/**
 * 转换对象处理灰色不可点击
 * @param type 0:其他月  1: 当前月往后加
 */
private void changeListTime(int type){//getMontyDay
    listchangedate.clear();
    int week = 0;//前面空格
    //加正常操作的项
    for (int i = 0; i < listdate.size(); i++) {
        if(TextUtils.isEmpty(listdate.get(i))){
            week += 1;
        }else{
            TimeChooseInfo timeChooseInfo = new TimeChooseInfo();
            timeChooseInfo.setGray(false);
            timeChooseInfo.setDay(listdate.get(i));
            listchangedate.add(timeChooseInfo);
        }
    }

    //灰色不可点击天数
    int gradays = TimeUtils.getMontyDay(chooseyearmonth)-listchangedate.size();
    Utils.ShowLog("灰色点击数量="+gradays);
    //加灰色不可点击
    for (int i = 0; i < gradays; i++) {
        TimeChooseInfo timeChooseInfo = new TimeChooseInfo();
        timeChooseInfo.setGray(true);
        if(type == 1){
            timeChooseInfo.setDay((Integer.parseInt(listdate.get(listdate.size()-1))+i+1)+"");
            listchangedate.add(timeChooseInfo);
        }else{
            timeChooseInfo.setDay((gradays-i)+"");
            listchangedate.add(0,timeChooseInfo);
        }
    }

    //加计算周后的空格数
    for (int i = 0; i < week; i++) {
        TimeChooseInfo timeChooseInfo = new TimeChooseInfo();
        timeChooseInfo.setGray(true);
        timeChooseInfo.setDay("");
        listchangedate.add(0,timeChooseInfo);
    }
}

#工具类 附件见

大家使用时,有个别背景样式 或布局 可自己自定义发挥、、、—————__Amity

#附件 链接 日期自定义选择器相关文件demo

你可能感兴趣的:(时间选择器)