漂亮的自定义日历控件(修改版)
来源:互联网 发布:qq营销软件 编辑:程序博客网 时间:2024/04/29 11:07
效果图
package com.teekart.app.travel;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import android.annotation.SuppressLint;import android.app.Activity;import android.app.AlertDialog;import android.content.DialogInterface;import android.content.Intent;import android.os.Bundle;import android.text.TextUtils;import android.view.View;import android.view.Window;import android.view.View.OnClickListener;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.TextView;import android.widget.Toast;import com.teekart.app.BaseActivity;import com.teekart.app.R;import com.teekart.app.beans.Travel_detail_Info.PriceList;import com.teekart.app.calandar.CalendarMoney;import com.teekart.app.calandar.MyCalendar;import com.teekart.app.calandar.MyCalendar.OnDaySelectListener;import com.teekart.util.Utils;/** * * @author king * */@SuppressLint("SimpleDateFormat")public class Canlader4TravelNewActivity extends BaseActivity implements OnDaySelectListener{LinearLayout ll; MyCalendar c1; Date date; String nowday; long nd = 1000*24L*60L*60L;//一天的毫秒数 SimpleDateFormat simpleDateFormat,sd1,sd2;// SharedPreferences sp;// Editor editor; private String inday,outday,sp_inday,sp_outday;private ImageView iv_back;private TextView tv_title;private int money;private int bookRecentDay;private ArrayList<PriceList> priceList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.comm_calendar_main); initTitle(); if (savedInstanceState != null) {getSaveData(savedInstanceState);} else {Intent intent = getIntent();money=intent.getIntExtra("money", 0);bookRecentDay=intent.getIntExtra("bookRecentDay", 0);//最近可预订的天数priceList=(ArrayList<PriceList>)intent.getSerializableExtra("priceList");//TeeTimeListTime =intent.getStringExtra("TeeTimeListTime");//最近可预订的天数} simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd"); nowday=simpleDateFormat.format(new Date());sd1=new SimpleDateFormat("yyyy");sd2=new SimpleDateFormat("dd"); ll=(LinearLayout) findViewById(R.id.ll); init(); } @Overrideprotected void onSaveInstanceState(Bundle outState) {super.onSaveInstanceState(outState);outState.putInt("money", money);outState.putInt("bookRecentDay", bookRecentDay);outState.putSerializable("priceList", priceList);}@Overrideprotected void onRestoreInstanceState(Bundle savedInstanceState) {super.onRestoreInstanceState(savedInstanceState);if (savedInstanceState != null) {getSaveData(savedInstanceState);}}private void getSaveData(Bundle savedInstanceState) {money=savedInstanceState.getInt("money", 0);bookRecentDay=savedInstanceState.getInt("bookRecentDay", 0);priceList=(ArrayList<PriceList>) savedInstanceState.getSerializable("priceList");} /** * 设置标题的内容 */private void initTitle() {iv_back = (ImageView) findViewById(R.id.iv_back);tv_title = (TextView) findViewById(R.id.tv_title);iv_back.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {finish();}});tv_title.setText("请选择出行日期");} private void init(){ List<String> listDate=getDateList(); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); for(int i=0;i<listDate.size();i++){//king 这里添加几个月份 c1 = new MyCalendar(this); c1.setLayoutParams(params); Date date=null; try { date=simpleDateFormat.parse(listDate.get(i)); } catch (ParseException e) { e.printStackTrace(); } if(!"".equals(sp_inday)){ c1.setInDay(sp_inday); } if(!"".equals(sp_outday)){ c1.setOutDay(sp_outday); } c1.setMoney(priceList); c1.setTheDay(date); c1.setOnDaySelectListener(this); ll.addView(c1); } } //点击事件@Overridepublic void onDaySelectListener(View view, String date) {//Toast.makeText(this, date, 0).show();Boolean isIn = false;// true代表选择日期是否存在for (int j = 0; j < priceList.size(); j++) {if (date.equals(priceList.get(j).travelDate)) {isIn=true;Intent intent = new Intent();intent.putExtra("travelDateStr", priceList.get(j).travelDateStr);intent.putExtra("travelDate", priceList.get(j).travelDate);intent.putExtra("price", priceList.get(j).totalPrice);setResult(RESULT_OK, intent);finish();}}if (!isIn) {showAlertDialog();// 拨打客服咨询}}//根据当前日期,向后数三个月(若当前day不是1号,为满足至少90天,则需要向后数4个月)@SuppressLint("SimpleDateFormat")public List<String> getDateList(){List<String> list=new ArrayList<String>();Date date=new Date();int nowMon=date.getMonth()+1;//当前月份String yyyy=sd1.format(date);//当前年份String dd=sd2.format(date);//当前日期if(nowMon==9){list.add(simpleDateFormat.format(date));list.add(yyyy+"-10-"+dd);if(!dd.equals("01")){list.add(yyyy+"-11-"+dd);}}else if(nowMon==10){list.add(yyyy+"-10-"+dd);list.add(yyyy+"-11-"+dd);if(!dd.equals("01")){list.add(yyyy+"-12-"+dd);}}else if(nowMon==11){list.add(yyyy+"-11-"+dd);list.add(yyyy+"-12-"+dd);if(!dd.equals("01")){list.add((Integer.parseInt(yyyy)+1)+"-01-"+dd);}}else if(nowMon==12){list.add(yyyy+"-12-"+dd);list.add((Integer.parseInt(yyyy)+1)+"-01-"+dd);if(!dd.equals("01")){list.add((Integer.parseInt(yyyy)+1)+"-02-"+dd);}}else{list.add(yyyy+"-"+getMon(nowMon)+"-"+dd);list.add(yyyy+"-"+getMon((nowMon+1))+"-"+dd);if(!dd.equals("01")){list.add(yyyy+"-"+getMon((nowMon+2))+"-"+dd);}}return list;}public String getMon(int mon){String month="";if(mon<10){month="0"+mon;}else{month=""+mon;}return month;}private void showAlertDialog() {AlertDialog.Builder builder = new AlertDialog.Builder(Canlader4TravelNewActivity.this);String noTeetimeTips="";noTeetimeTips="当前日期没有旅游套餐,拨打我们的咨询电话?";builder.setTitle("温馨提示").setMessage(noTeetimeTips).setNeutralButton("立即咨询",new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {Utils.phone(Canlader4TravelNewActivity.this,Utils.phoneNum);}}).setPositiveButton("取消", new DialogInterface.OnClickListener() {public void onClick(DialogInterface dialog, int id) {dialog.cancel();}});AlertDialog alert = builder.create();alert.show();}}
package com.teekart.app.calandar;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Calendar;import java.util.Date;import java.util.List;import android.content.Context;import android.graphics.Color;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.BaseAdapter;import android.widget.LinearLayout;import android.widget.TextView;import com.teekart.app.R;import com.teekart.app.beans.Travel_detail_Info.PriceList;/** * * @author king * */public class MyCalendar extends LinearLayout { private static Context context; private Date theInDay; private String inday="",outday=""; public static View viewIn; public static View viewOut; public static String positionIn; public static String positionOut; static long nd = 1000*24L*60L*60L;//一天的毫秒数 private List<String> gvList ;//存放天 private OnDaySelectListener callBack;//回调函数 private static String nowday= new SimpleDateFormat("yyyy-MM-dd").format(new Date()) ; private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMM");//日期格式化 private ArrayList<PriceList> calendarMoneys; private static SimpleDateFormat dateFormat2 = new SimpleDateFormat("yyyy-MM-dd");//日期格式化 /** * 构造函数 * @param context */ public MyCalendar(Context context) { super(context); MyCalendar.context = context; } /** * 构造函数 * @param context */ public MyCalendar(Context context, AttributeSet attrs) { super(context, attrs); MyCalendar.context = context; } public void setInDay(String inday){ this.inday=inday; } public void setOutDay(String outday){ this.outday=outday; } public void setTheDay(Date dateIn){ this.theInDay=dateIn; init(); } public void setMoney(ArrayList<PriceList> calendarMoneys){ this.calendarMoneys=calendarMoneys; } /** * 初始化日期以及view等控件 */ private void init() { gvList = new ArrayList<String>();//存放天 final Calendar cal = Calendar.getInstance();//获取日历实例 cal.setTime(theInDay);//cal设置为当天的 cal.set(Calendar.DATE, 1);//cal设置当前day为当前月第一天 int tempSum = countNeedHowMuchEmpety(cal);//获取当前月第一天为星期几 int dayNumInMonth = getDayNumInMonth(cal);//获取当前月有多少天 setGvListData(tempSum, dayNumInMonth,cal.get(Calendar.YEAR)+"-"+getMonth((cal.get(Calendar.MONTH)+1))); View view = LayoutInflater.from(context).inflate(R.layout.comm_calendar, this, true);//获取布局,开始初始化 TextView tv_year= (TextView) view.findViewById(R.id.tv_year); if(cal.get(Calendar.YEAR)>new Date().getYear()){ tv_year.setVisibility(View.VISIBLE); tv_year.setText(cal.get(Calendar.YEAR)+"年"); } TextView tv_month= (TextView) view.findViewById(R.id.tv_month); tv_month.setText(String.valueOf(theInDay.getMonth()+1)); MyGridView gv = (MyGridView) view.findViewById(R.id.gv_calendar); calendarGridViewAdapter gridViewAdapter = new calendarGridViewAdapter(gvList,inday,outday); gridViewAdapter.setMoney(calendarMoneys); gv.setAdapter(gridViewAdapter); gv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View arg1,int position, long arg3) { String choiceDay = (String) adapterView.getAdapter().getItem(position); String[] date=choiceDay.split(","); String day=date[1]; if (!" ".equals(day)) { if (Integer.parseInt(day) < 10) { day = "0" + date[1]; } choiceDay = date[0] +"-"+ day; if (callBack != null) {//调用回调函数回调数据 callBack.onDaySelectListener(arg1,choiceDay); } } } }); } /** * 为gridview中添加需要展示的数据 * @param tempSum * @param dayNumInMonth */ private void setGvListData(int tempSum, int dayNumInMonth,String YM) { gvList.clear(); for (int i = 0; i < tempSum; i++) { gvList.add(" , "); } for (int j = 1; j <= dayNumInMonth; j++) { gvList.add(YM+","+String.valueOf(j)); } } private String getMonth(int month) { String mon=""; if(month<10){ mon="0"+month; }else{ mon=""+month; } return mon; } /** * 获取当前月的总共天数 * @param cal * @return */ private int getDayNumInMonth(Calendar cal) { return cal.getActualMaximum(Calendar.DATE); } /** * 获取当前月第一天在第一个礼拜的第几天,得出第一天是星期几 * @param cal * @return */ private int countNeedHowMuchEmpety(Calendar cal) { int firstDayInWeek = cal.get(Calendar.DAY_OF_WEEK) - 1; return firstDayInWeek; } /** * gridview中adapter的viewholder * @author Administrator * */ static class GrideViewHolder { TextView tvDay,tv; } /** * gridview的adapter * @author Administrator * */ static class calendarGridViewAdapter extends BaseAdapter { List<String> gvList ;//存放天 String inday,outday; // private String moneyStr;// private String bookRecentDay; private ArrayList<PriceList> calendarMoneys; public calendarGridViewAdapter(List<String> gvList,String inday,String outday){ super(); this.gvList=gvList; this.inday=inday; this.outday=outday; } public void setMoney(ArrayList<PriceList> calendarMoneys){ this.calendarMoneys=calendarMoneys; } @Override public int getCount() { return gvList.size(); } @Override public String getItem(int position) { return gvList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { GrideViewHolder holder; if (convertView == null) { holder = new GrideViewHolder(); convertView = inflate(context,R.layout.common_calendar_gridview_item, null); holder.tv = (TextView) convertView.findViewById(R.id.tv_calendar); holder.tvDay = (TextView) convertView.findViewById(R.id.tv_calendar_day); convertView.setTag(holder); } else { holder = (GrideViewHolder) convertView.getTag(); } String[] date=getItem(position).split(","); holder.tvDay.setText(date[1]); String s = date[1]; String calshowdate; if(s.getBytes().length==1){ calshowdate = date[0]+"-0"+date[1]; }else{ calshowdate = date[0]+"-"+date[1]; } for (int i = 0; i < calendarMoneys.size(); i++) { if (calshowdate.equals(calendarMoneys.get(i).travelDate)) { holder.tv.setText("¥" + calendarMoneys.get(i).totalPrice); } } if((position+1)%7==0||(position)%7==0){ //修改周末的颜色// holder.tvDay.setTextColor(Color.parseColor("#339900")); } if(!date[1].equals(" ")){ String day=date[1]; if(Integer.parseInt(date[1])<10){ day="0"+date[1]; } if((date[0]+"-"+day).equals(nowday)){ holder.tvDay.setTextColor(Color.parseColor("#ff8d00")); holder.tvDay.setTextSize(15); holder.tvDay.setText("今天"); }// if(!"".equals(inday)&&(date[0]+"-"+day).equals(inday)){// convertView.setBackgroundColor(Color.parseColor("#33B5E5"));// holder.tvDay.setTextColor(Color.WHITE);// holder.tvDay.setText(date[1]);// holder.tv.setText("入住");// viewIn=convertView;// positionIn=date[1];// }// if(!"".equals(outday)&&(date[0]+"-"+day).equals(outday)){// convertView.setBackgroundColor(Color.parseColor("#33B5E5"));// holder.tvDay.setTextColor(Color.WHITE);// holder.tvDay.setText(date[1]);// holder.tv.setText("离开");// viewOut=convertView;// positionOut=date[1];// } try { //若日历日期<当前日期,则不能选择 if(dateFormat2.parse(date[0]+"-"+day).getTime()<dateFormat2.parse(nowday).getTime()){ holder.tvDay.setTextColor(Color.parseColor("#999999")); } //若日历日期-当前日期>60天,则不能选择 long dayxc=(dateFormat2.parse(date[0]+"-"+day).getTime()-dateFormat2.parse(nowday).getTime())/nd; if(dayxc>60){ holder.tvDay.setTextColor(Color.parseColor("#999999")); } } catch (ParseException e) { e.printStackTrace(); } } return convertView; } } /** * 自定义监听接口 * @author Administrator * */ public interface OnDaySelectListener { void onDaySelectListener(View view,String date); } /** * 自定义监听接口设置对象 * @param o */ public void setOnDaySelectListener(OnDaySelectListener o) { callBack = o; }}
0 0
- 漂亮的自定义日历控件(修改版)
- 漂亮的JS日历控件
- 漂亮的JS日历控件
- 超酷超漂亮的JS日历控件
- JS 时间控件 漂亮的彩色 日历
- 三款漂亮的js日历控件
- 漂亮 的日期时间控件 日历
- 三款漂亮的js日历控件
- Android又一个超漂亮的日历控件
- Android又一个超漂亮的日历控件
- android - 怎么做出漂亮的日历控件
- flex日历控件的自定义
- 漂亮的脚本日历
- 漂亮的脚本日历
- 漂亮的脚本日历
- 漂亮的日历
- 漂亮的js日历
- 漂亮的脚本日历
- iOS 图标上的数字
- Redis学习--Hash类型
- iOS 学习资源
- 线程同步的方法
- TPROXY - Transparent proxy - UDP program - RHEL6
- 漂亮的自定义日历控件(修改版)
- ZOJ-3785-What day is that day?【11th浙江省赛】【打表找规律】【快速幂】
- 布尔运算 逻辑运算 移位运算
- 我的信念
- 通达OA 对通达2015版微信查询用户信息模块升级开发(图文)
- HDU 5533 Dancing Stars on Me
- Android中防止EditText输入框被输入法遮挡(画面随输入法自适应)
- console.read()的特殊用法及解决
- python的list要打印中文字符