启用和禁用在Android上的日期 [英] Enable and Disable the dates in android

查看:185
本文介绍了启用和禁用在Android上的日期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在所有月份星期日;必须使只有在所有月份或星期一&放星期一:

我使用的日历在我的应用程序,已经成功地实施压光在我的应用程序,但毋庸置疑的是如何启用和禁用特定日期(如)。

我的日历视图

 进口的java.util.ArrayList;
进口java.util.GregorianCalendar中;
进口java.util.Locale中;进口android.app.Activity;
进口android.graphics.Color;
进口android.graphics.Typeface;
进口android.os.Bundle;
进口android.os.Handler;
进口android.util.Log;
进口android.view.View;
进口android.view.View.OnClickListener;
进口android.view.Window;
进口android.widget.AdapterView;
进口android.widget.AdapterView.OnItemClickListener;
进口android.widget.GridView;
进口android.widget.LinearLayout;
进口android.widget.RelativeLayout;
进口android.widget.TextView;
进口android.widget.Toast;进口com.infometricx.adapter.CalendarAdapter;
进口com.infometricx.utils.CalendarUtility;公共类CalendarView延伸活动{    公共GregorianCalendar的月份,itemmonth; //日历实例。    公共CalendarAdapter适配器; //适配器实例
    公开处理程序处理; //用于显示点一些抢夺事件值
                            //标记。
    公众的ArrayList<串GT;项目; //容器来储存日历项其中
                                    //需要显示事件标记
    ArrayList的<串GT;事件;
    的LinearLayout rLayout;
    ArrayList的<串GT;日期;
    ArrayList的<串GT;说明;    字体MyriadPro;    公共无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);
        的setContentView(R.layout.calender);
        Locale.setDefault(Locale.US);        rLayout =(的LinearLayout)findViewById(R.id.text);        MyriadPro = Typeface.createFromAsset(getAssets(),
                字体/ MyriadPro-Light.otf);        一个月=(GregorianCalendar的)GregorianCalendar.getInstance();
        itemmonth =(GregorianCalendar的)month.clone();        项目=新的ArrayList<串GT;();        适配器=新CalendarAdapter(这一点,月);        GridView控件的GridView =(GridView控件)findViewById(R.id.gridview);
        gridview.setAdapter(适配器);        处理器=新的处理程序();
        handler.post(calendarUpdater);        TextView的标题=(的TextView)findViewById(R.id.title);
        title.setText(android.text.format.DateFormat.format(MMMM YYYY,月));        title.setTypeface(MyriadPro);        RelativeLayout的previous =(RelativeLayout的)findViewById(R.id. previous);        previous.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                集previousMonth();
                refreshCalendar();
            }
        });        接下来的RelativeLayout =(RelativeLayout的)findViewById(R.id.next);
        next.setOnClickListener(新OnClickListener(){            @覆盖
            公共无效的onClick(视图v){
                setNextMonth();
                refreshCalendar();            }
        });        gridview.setOnItemClickListener(新OnItemClickListener(){
            公共无效onItemClick(适配器视图<>母公司,视图V,
                    INT位置,长的id){
                //删除previous认为,如果加
                如果(((的LinearLayout)rLayout).getChildCount()大于0){
                    ((的LinearLayout)rLayout).removeAllViews();
                }
                DESC =新的ArrayList<串GT;();
                日期=新的ArrayList<串GT;();
                ((CalendarAdapter)parent.getAdapter())的setSelected(ⅴ)。
                字符串selectedGridDate = CalendarAdapter.dayString
                        获得(位置);                Log.d(selectedGridDate,----->中+ selectedGridDate);                串[] separatedTime = selectedGridDate.split( - );
                字符串gridvalueString = separatedTime [2] .replaceFirst(^ 0 *,
                        ); //取日期的最后一部分。即; 2,从2012年12月2日。
                INT gridvalue =的Integer.parseInt(gridvalueString);
                //浏览下一个或previous每月点击offdays。
                如果((gridvalue→10)及及(位置及下; 8)){
                    集previousMonth();
                    refreshCalendar();
                }否则如果((gridvalue 7;)及及(位置> 28)){
                    setNextMonth();
                    refreshCalendar();
                }
                ((CalendarAdapter)parent.getAdapter())的setSelected(ⅴ)。                的for(int i = 0; I< CalendarUtility.startDates.size();我++){                }                的for(int i = 0; I< CalendarUtility.startDates.size();我++){
                    如果(CalendarUtility.startDates.get(ⅰ).equals(
                            selectedGridDate)){
                        desc.add(CalendarUtility.nameOfEvent.get(I));
                    }
                }                如果(desc.size()大于0){
                    的for(int i = 0; I< desc.size();我++){
                        TextView的rowTextView =新的TextView(CalendarView.this);                        //设置ro​​wTextView或某事的一些性质
                        rowTextView.setText(事件:+ desc.get(I));
                        rowTextView.setTextColor(Color.BLACK);                        // TextView的添加到的LinearLayout
                        rLayout.addView(rowTextView);                    }                }                说明= NULL;            }        });
    }    保护无效setNextMonth(){
        如果(month.get(GregorianCalendar.MONTH)==月
                .getActualMaximum(GregorianCalendar.MONTH)){
            month.set((month.get(GregorianCalendar.YEAR)+1),
                    month.getActualMinimum(GregorianCalendar.MONTH),1);
        }其他{
            month.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH)+1);
        }    }    保护无效集previousMonth(){
        如果(month.get(GregorianCalendar.MONTH)==月
                .getActualMinimum(GregorianCalendar.MONTH)){
            month.set((month.get(GregorianCalendar.YEAR) - 1),
                    month.getActualMaximum(GregorianCalendar.MONTH),1);
        }其他{
            month.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH) - 1);
        }    }    保护无效showToast(字符串字符串){
        Toast.makeText(这一点,字符串,Toast.LENGTH_SHORT).show();    }    公共无效refreshCalendar(){
        TextView的标题=(的TextView)findViewById(R.id.title);        adapter.refreshDays();
        adapter.notifyDataSetChanged();
        handler.post(calendarUpdater); //生成一些日历项        title.setText(android.text.format.DateFormat.format(MMMM YYYY,月));    }    公众可运行calendarUpdater =新的Runnable(){        @覆盖
        公共无效的run(){
            items.clear();            //当前周的打印日期
            //日期格式DF =新的SimpleDateFormat(YYYY-MM-DD,Locale.US);            事件= CalendarUtility.readCalendarEvent(CalendarView.this);
            Log.d(=====事件====,event.toString());
            Log.d(=====日期ARRAY ====,CalendarUtility.startDates.toString());            的for(int i = 0; I< CalendarUtility.startDates.size();我++){                itemmonth.add(GregorianCalendar.DATE,1);
                items.add(CalendarUtility.startDates.get(ⅰ)的ToString());
            }
            adapter.setItems(项目);
            adapter.notifyDataSetChanged();
        }
    };
}

我的日历适配器

 导入java.text.DateFormat中;
进口java.text.SimpleDateFormat的;
进口的java.util.ArrayList;
进口java.util.GregorianCalendar中;
进口的java.util.List;
进口java.util.Locale中;进口android.content.Context;
进口android.graphics.Color;
进口android.graphics.Typeface;
进口android.util.Log;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;进口com.infometricx.goappointed.R;公共类CalendarAdapter延伸BaseAdapter {    私人语境mContext;    私人的java.util.Calendar月;
    公共GregorianCalendar的pmonth; //为previous月日历实例
    / **
     获取完整视图为previous月*日历实例
     * /
    公共GregorianCalendar的pmonthmaxset;
    私人GregorianCalendar的selectedDate;
    INT firstDay;
    INT maxWeeknumber;
    INT MAXP;
    INT calMaxP;
    INT lastWeekDay;
    INT leftDays;
    INT mnthlength;
    串itemvalue,curentDateString;
    日期格式DF;    私人的ArrayList<串GT;项目;
    公共静态列表<串GT; dayString;
    私人查看previousView;
    字体mMypriad;    公共CalendarAdapter(上下文C,GregorianCalendar的MONTHCALENDAR){
        CalendarAdapter.dayString =新的ArrayList<串GT;();
        Locale.setDefault(Locale.US);        mMypriad = Typeface.createFromAsset(c.getAssets(),
                字体/ MyriadPro-Light.otf);        月= MONTHCALENDAR;
        selectedDate =(GregorianCalendar的)monthCalendar.clone();
        mContext = C;
        month.set(GregorianCalendar.DAY_OF_MONTH,1);
        this.items =新的ArrayList<串GT;();
        DF =新的SimpleDateFormat(YYYY-MM-DD,Locale.US);
        curentDateString = df.format(selectedDate.getTime());
        refreshDays();
    }    公共无效setItems(ArrayList的<串GT;项目){
        的for(int i = 0; i = items.size(!);我++){
            如果(items.get(ⅰ)。长度()== 1){
                items.set(ⅰ,0+ items.get(ⅰ));
            }
        }
        this.items =物品;
    }    公众诠释的getCount(){
        返回dayString.size();
    }    公共对象的getItem(INT位置){
        返回dayString.get(位置);
    }    众长getItemId(INT位置){
        返回0;
    }    //创建由适配器引用的每个项目的新观点
    公共查看getView(INT位置,查看convertView,父母的ViewGroup){
        视图V = convertView;
        最终的TextView dayView;
        如果(convertView == NULL){//如果它没有回收,初始化一些
                                    //属性
            LayoutInflater VI =(LayoutInflater)mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            V = vi.inflate(R.layout.calenderitem,NULL);        }
        dayView =(TextView中)v.findViewById(R.id.date);
        //分隔成daystring部分。
        串[] separatedTime = dayString.get(位置).split( - );
        //服用日期的最后一部分。即; 2,从2012年12月2日
        串gridvalue = separatedTime [2] .replaceFirst(^ 0 *,);
        //检查当天是否在当前月或没有。
        如果((的Integer.parseInt(gridvalue)→1)及及(位置及下; firstDay)){
            //设置offdays为白色。
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(假);
            dayView.setFocusable(假);
        }否则如果((的Integer.parseInt(gridvalue)7;)及及(位置> 28)){
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(假);
            dayView.setFocusable(假);
        }其他{
            //蓝色颜色设置CURENT一个月的日子。
            dayView.setTextColor(Color.BLACK);
        }        如果(dayString.get(位置).equals(curentDateString)){
            (五)的setSelected;
            previousView = V;
        }其他{
            v.setBackgroundResource(R.drawable.list_item_background);
        }        dayView.setText(gridvalue);
        dayView.setTypeface(mMypriad);        //创建比较日期字符串
        字符串日期= dayString.get(位置);        Log.d(日期, - >中+日期);        如果(date.length()== 1){
            日期=0和日期;
        }
        串monthStr =+(month.get(GregorianCalendar.MONTH)+1);
        如果(monthStr.length()== 1){
            monthStr =0+ monthStr;
        }
        返回伏;
    }    公共景观的setSelected(查看视图){
        如果(previousView!= NULL){
            previousView.setBackgroundResource(R.drawable.list_item_background);
        }
        previousView =视图;
        view.setBackgroundResource(R.drawable.calendar_cel_selectl);
        返回视图。
    }    公共无效refreshDays(){
        //明确项目
        items.clear();
        dayString.clear();
        Locale.setDefault(Locale.US);
        pmonth =(GregorianCalendar的)month.clone();
        //月开始日。即;周日,周一,等
        firstDay = month.get(GregorianCalendar.DAY_OF_WEEK);
        //在当月发现周数。
        maxWeeknumber = month.getActualMaximum(GregorianCalendar.WEEK_OF_MONTH);
        //为GridView分配的最大行数。
        mnthlength = maxWeeknumber * 7;
        MAXP = getMaxP(); // previous月31,30日最高....
        calMaxP = MAXP - (firstDay - 1); //日历offday起始24,25 ...
        / **
         *为获得一个完整的GridView包括三个日历实例
         *一个月(previous,目前,下一个)的日期。
         * /
        pmonthmaxset =(GregorianCalendar的)pmonth.clone();
        / **
         *设定开始日期为previous一个月所需的日期。
         * /
        pmonthmaxset.set(GregorianCalendar.DAY_OF_MONTH,calMaxP + 1);        / **
         *灌装日历GridView控件。
         * /
        对于(INT N = 0; N< mnthlength; N ++){            itemvalue = df.format(pmonthmaxset.getTime());
            pmonthmaxset.add(GregorianCalendar.DATE,1);
            dayString.add(itemvalue);        }
    }    私人诠释getMaxP(){
        INT MAXP;
        如果(month.get(GregorianCalendar.MONTH)==月
                .getActualMinimum(GregorianCalendar.MONTH)){
            pmonth.set((month.get(GregorianCalendar.YEAR) - 1),
                    month.getActualMaximum(GregorianCalendar.MONTH),1);
        }其他{
            pmonth.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH) - 1);
        }
        MAXP = pmonth.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);        返回MAXP;
    }}

相关方法:

  dayView =(TextView中)v.findViewById(R.id.date);
    //分隔成daystring部分。
    串[] separatedTime = dayString.get(位置).split( - );
    //服用日期的最后一部分。即; 2,从2012年12月2日
    串gridvalue = separatedTime [2] .replaceFirst(^ 0 *,);
    //检查当天是否在当前月或没有。
    如果((的Integer.parseInt(gridvalue)→1)及及(位置及下; firstDay)){
        //设置offdays为白色。
        dayView.setTextColor(Color.WHITE);
        dayView.setClickable(假);
        dayView.setFocusable(假);
    }否则如果((的Integer.parseInt(gridvalue)7;)及及(位置> 28)){
        dayView.setTextColor(Color.WHITE);
        dayView.setClickable(假);
        dayView.setFocusable(假);
    }其他{
        //蓝色颜色设置CURENT一个月的日子。
        dayView.setTextColor(Color.BLACK);
    }

这是我在这里已经形成一个日历视图我的适配器类

帮助我得到一个解决方案,
先谢谢了。


解决方案

  dayView =(TextView中)v.findViewById(R.id.date);
        //分隔成daystring部分。
        串[] separatedTime = dayString.get(位置).split( - );
        //服用日期的最后一部分。即; 2,从2012年12月2日
        串gridvalue = separatedTime [2] .replaceFirst(^ 0 *,);
        //检查当天是否在当前月或没有。
        如果((的Integer.parseInt(gridvalue)→1)及及(位置及下; firstDay)){
            //设置offdays为白色。
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(假);
            dayView.setFocusable(假);
                     浮动阿尔法= 0.55f;
            AlphaAnimation alphaUp =新AlphaAnimation(α,α);
            alphaUp.setFillAfter(真);
            dayView.startAnimation(alphaUp);        }否则如果((的Integer.parseInt(gridvalue)7;)及及(位置> 28)){
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(假);
            dayView.setFocusable(假);
 浮动阿尔法= 0.35f;
            AlphaAnimation alphaUp =新AlphaAnimation(α,α);
            alphaUp.setFillAfter(真);
            dayView.startAnimation(alphaUp);
                          dayView.setClickable(假);
        }其他{
            //蓝色颜色设置CURENT一个月的日子。
            dayView.setTextColor(Color.BLACK);
             浮动阿尔法= 0.75f​​;
            AlphaAnimation alphaUp =新AlphaAnimation(α,α);
            alphaUp.setFillAfter(真);
            dayView.startAnimation(alphaUp);
                          dayView.setClickable(假);
        }

i am using calendar in my application, successfully have implemented calender in my app, but the doubt is how to enable and disable the specific dates(ex: need to enable only monday in all months or Monday & sunday in all months).

My calender view

import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.Locale;

import android.app.Activity;
import android.graphics.Color;
import android.graphics.Typeface;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.infometricx.adapter.CalendarAdapter;
import com.infometricx.utils.CalendarUtility;

public class CalendarView extends Activity {

    public GregorianCalendar month, itemmonth;// calendar instances.

    public CalendarAdapter adapter;// adapter instance
    public Handler handler;// for grabbing some event values for showing the dot
                            // marker.
    public ArrayList<String> items; // container to store calendar items which
                                    // needs showing the event marker
    ArrayList<String> event;
    LinearLayout rLayout;
    ArrayList<String> date;
    ArrayList<String> desc;

    Typeface MyriadPro;

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.calender);
        Locale.setDefault(Locale.US);

        rLayout = (LinearLayout) findViewById(R.id.text);

        MyriadPro = Typeface.createFromAsset(getAssets(),
                "fonts/MyriadPro-Light.otf");

        month = (GregorianCalendar) GregorianCalendar.getInstance();
        itemmonth = (GregorianCalendar) month.clone();

        items = new ArrayList<String>();

        adapter = new CalendarAdapter(this, month);

        GridView gridview = (GridView) findViewById(R.id.gridview);
        gridview.setAdapter(adapter);

        handler = new Handler();
        handler.post(calendarUpdater);

        TextView title = (TextView) findViewById(R.id.title);
        title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));

        title.setTypeface(MyriadPro);

        RelativeLayout previous = (RelativeLayout) findViewById(R.id.previous);

        previous.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                setPreviousMonth();
                refreshCalendar();
            }
        });

        RelativeLayout next = (RelativeLayout) findViewById(R.id.next);
        next.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                setNextMonth();
                refreshCalendar();

            }
        });

        gridview.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v,
                    int position, long id) {
                // removing the previous view if added
                if (((LinearLayout) rLayout).getChildCount() > 0) {
                    ((LinearLayout) rLayout).removeAllViews();
                }
                desc = new ArrayList<String>();
                date = new ArrayList<String>();
                ((CalendarAdapter) parent.getAdapter()).setSelected(v);
                String selectedGridDate = CalendarAdapter.dayString
                        .get(position);

                Log.d("selectedGridDate", "----->" + selectedGridDate);

                String[] separatedTime = selectedGridDate.split("-");
                String gridvalueString = separatedTime[2].replaceFirst("^0*",
                        "");// taking last part of date. ie; 2 from 2012-12-02.
                int gridvalue = Integer.parseInt(gridvalueString);
                // navigate to next or previous month on clicking offdays.
                if ((gridvalue > 10) && (position < 8)) {
                    setPreviousMonth();
                    refreshCalendar();
                } else if ((gridvalue < 7) && (position > 28)) {
                    setNextMonth();
                    refreshCalendar();
                }
                ((CalendarAdapter) parent.getAdapter()).setSelected(v);

                for (int i = 0; i < CalendarUtility.startDates.size(); i++) {

                }

                for (int i = 0; i < CalendarUtility.startDates.size(); i++) {
                    if (CalendarUtility.startDates.get(i).equals(
                            selectedGridDate)) {
                        desc.add(CalendarUtility.nameOfEvent.get(i));
                    }
                }

                if (desc.size() > 0) {
                    for (int i = 0; i < desc.size(); i++) {
                        TextView rowTextView = new TextView(CalendarView.this);

                        // set some properties of rowTextView or something
                        rowTextView.setText("Event:" + desc.get(i));
                        rowTextView.setTextColor(Color.BLACK);

                        // add the textview to the linearlayout
                        rLayout.addView(rowTextView);

                    }

                }

                desc = null;

            }

        });
    }

    protected void setNextMonth() {
        if (month.get(GregorianCalendar.MONTH) == month
                .getActualMaximum(GregorianCalendar.MONTH)) {
            month.set((month.get(GregorianCalendar.YEAR) + 1),
                    month.getActualMinimum(GregorianCalendar.MONTH), 1);
        } else {
            month.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH) + 1);
        }

    }

    protected void setPreviousMonth() {
        if (month.get(GregorianCalendar.MONTH) == month
                .getActualMinimum(GregorianCalendar.MONTH)) {
            month.set((month.get(GregorianCalendar.YEAR) - 1),
                    month.getActualMaximum(GregorianCalendar.MONTH), 1);
        } else {
            month.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH) - 1);
        }

    }

    protected void showToast(String string) {
        Toast.makeText(this, string, Toast.LENGTH_SHORT).show();

    }

    public void refreshCalendar() {
        TextView title = (TextView) findViewById(R.id.title);

        adapter.refreshDays();
        adapter.notifyDataSetChanged();
        handler.post(calendarUpdater); // generate some calendar items

        title.setText(android.text.format.DateFormat.format("MMMM yyyy", month));

    }

    public Runnable calendarUpdater = new Runnable() {

        @Override
        public void run() {
            items.clear();

            // Print dates of the current week
            // DateFormat df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);

            event = CalendarUtility.readCalendarEvent(CalendarView.this);
            Log.d("=====Event====", event.toString());
            Log.d("=====Date ARRAY====", CalendarUtility.startDates.toString());

            for (int i = 0; i < CalendarUtility.startDates.size(); i++) {

                itemmonth.add(GregorianCalendar.DATE, 1);
                items.add(CalendarUtility.startDates.get(i).toString());
            }
            adapter.setItems(items);
            adapter.notifyDataSetChanged();
        }
    };
}

My Calender Adapter

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.Locale;

import android.content.Context;
import android.graphics.Color;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

import com.infometricx.goappointed.R;

public class CalendarAdapter extends BaseAdapter {

    private Context mContext;

    private java.util.Calendar month;
    public GregorianCalendar pmonth; // calendar instance for previous month
    /**
     * calendar instance for previous month for getting complete view
     */
    public GregorianCalendar pmonthmaxset;
    private GregorianCalendar selectedDate;
    int firstDay;
    int maxWeeknumber;
    int maxP;
    int calMaxP;
    int lastWeekDay;
    int leftDays;
    int mnthlength;
    String itemvalue, curentDateString;
    DateFormat df;

    private ArrayList<String> items;
    public static List<String> dayString;
    private View previousView;
    Typeface mMypriad;

    public CalendarAdapter(Context c, GregorianCalendar monthCalendar) {
        CalendarAdapter.dayString = new ArrayList<String>();
        Locale.setDefault(Locale.US);

        mMypriad = Typeface.createFromAsset(c.getAssets(),
                "fonts/MyriadPro-Light.otf");

        month = monthCalendar;
        selectedDate = (GregorianCalendar) monthCalendar.clone();
        mContext = c;
        month.set(GregorianCalendar.DAY_OF_MONTH, 1);
        this.items = new ArrayList<String>();
        df = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
        curentDateString = df.format(selectedDate.getTime());
        refreshDays();
    }

    public void setItems(ArrayList<String> items) {
        for (int i = 0; i != items.size(); i++) {
            if (items.get(i).length() == 1) {
                items.set(i, "0" + items.get(i));
            }
        }
        this.items = items;
    }

    public int getCount() {
        return dayString.size();
    }

    public Object getItem(int position) {
        return dayString.get(position);
    }

    public long getItemId(int position) {
        return 0;
    }

    // create a new view for each item referenced by the Adapter
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        final TextView dayView;
        if (convertView == null) { // if it's not recycled, initialize some
                                    // attributes
            LayoutInflater vi = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.calenderitem, null);

        }
        dayView = (TextView) v.findViewById(R.id.date);
        // separates daystring into parts.
        String[] separatedTime = dayString.get(position).split("-");
        // taking last part of date. ie; 2 from 2012-12-02
        String gridvalue = separatedTime[2].replaceFirst("^0*", "");
        // checking whether the day is in current month or not.
        if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) {
            // setting offdays to white color.
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(false);
            dayView.setFocusable(false);
        } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) {
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(false);
            dayView.setFocusable(false);
        } else {
            // setting curent month's days in blue color.
            dayView.setTextColor(Color.BLACK);
        }

        if (dayString.get(position).equals(curentDateString)) {
            setSelected(v);
            previousView = v;
        } else {
            v.setBackgroundResource(R.drawable.list_item_background);
        }

        dayView.setText(gridvalue);
        dayView.setTypeface(mMypriad);

        // create date string for comparison
        String date = dayString.get(position);

        Log.d("date", "--->" + date);

        if (date.length() == 1) {
            date = "0" + date;
        }
        String monthStr = "" + (month.get(GregorianCalendar.MONTH) + 1);
        if (monthStr.length() == 1) {
            monthStr = "0" + monthStr;
        }
        return v;
    }

    public View setSelected(View view) {
        if (previousView != null) {
            previousView.setBackgroundResource(R.drawable.list_item_background);
        }
        previousView = view;
        view.setBackgroundResource(R.drawable.calendar_cel_selectl);
        return view;
    }

    public void refreshDays() {
        // clear items
        items.clear();
        dayString.clear();
        Locale.setDefault(Locale.US);
        pmonth = (GregorianCalendar) month.clone();
        // month start day. ie; sun, mon, etc
        firstDay = month.get(GregorianCalendar.DAY_OF_WEEK);
        // finding number of weeks in current month.
        maxWeeknumber = month.getActualMaximum(GregorianCalendar.WEEK_OF_MONTH);
        // allocating maximum row number for the gridview.
        mnthlength = maxWeeknumber * 7;
        maxP = getMaxP(); // previous month maximum day 31,30....
        calMaxP = maxP - (firstDay - 1);// calendar offday starting 24,25 ...
        /**
         * Calendar instance for getting a complete gridview including the three
         * month's (previous,current,next) dates.
         */
        pmonthmaxset = (GregorianCalendar) pmonth.clone();
        /**
         * setting the start date as previous month's required date.
         */
        pmonthmaxset.set(GregorianCalendar.DAY_OF_MONTH, calMaxP + 1);

        /**
         * filling calendar gridview.
         */
        for (int n = 0; n < mnthlength; n++) {

            itemvalue = df.format(pmonthmaxset.getTime());
            pmonthmaxset.add(GregorianCalendar.DATE, 1);
            dayString.add(itemvalue);

        }
    }

    private int getMaxP() {
        int maxP;
        if (month.get(GregorianCalendar.MONTH) == month
                .getActualMinimum(GregorianCalendar.MONTH)) {
            pmonth.set((month.get(GregorianCalendar.YEAR) - 1),
                    month.getActualMaximum(GregorianCalendar.MONTH), 1);
        } else {
            pmonth.set(GregorianCalendar.MONTH,
                    month.get(GregorianCalendar.MONTH) - 1);
        }
        maxP = pmonth.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);

        return maxP;
    }

}

Relevant Method:

dayView = (TextView) v.findViewById(R.id.date);
    // separates daystring into parts.
    String[] separatedTime = dayString.get(position).split("-");
    // taking last part of date. ie; 2 from 2012-12-02
    String gridvalue = separatedTime[2].replaceFirst("^0*", "");
    // checking whether the day is in current month or not.
    if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) {
        // setting offdays to white color.
        dayView.setTextColor(Color.WHITE);
        dayView.setClickable(false);
        dayView.setFocusable(false);
    } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) {
        dayView.setTextColor(Color.WHITE);
        dayView.setClickable(false);
        dayView.setFocusable(false);
    } else {
        // setting curent month's days in blue color.
        dayView.setTextColor(Color.BLACK);
    }

This is my adapter class where i have formed a calendar view

Help me to get a solution, Thanks in advance.

解决方案

    dayView = (TextView) v.findViewById(R.id.date);
        // separates daystring into parts.
        String[] separatedTime = dayString.get(position).split("-");
        // taking last part of date. ie; 2 from 2012-12-02
        String gridvalue = separatedTime[2].replaceFirst("^0*", "");
        // checking whether the day is in current month or not.
        if ((Integer.parseInt(gridvalue) > 1) && (position < firstDay)) {
            // setting offdays to white color.
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(false);
            dayView.setFocusable(false);
                     float alpha = 0.55f;
            AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha);
            alphaUp.setFillAfter(true);
            dayView.startAnimation(alphaUp);

        } else if ((Integer.parseInt(gridvalue) < 7) && (position > 28)) {
            dayView.setTextColor(Color.WHITE);
            dayView.setClickable(false);
            dayView.setFocusable(false);
 float alpha = 0.35f;
            AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha);
            alphaUp.setFillAfter(true);
            dayView.startAnimation(alphaUp);
                          dayView.setClickable(false);
        } else {
            // setting curent month's days in blue color.
            dayView.setTextColor(Color.BLACK);
             float alpha = 0.75f;
            AlphaAnimation alphaUp = new AlphaAnimation(alpha, alpha);
            alphaUp.setFillAfter(true);
            dayView.startAnimation(alphaUp);
                          dayView.setClickable(false);
        }

这篇关于启用和禁用在Android上的日期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆