启用和禁用在Android上的日期 [英] Enable and Disable the dates in android
本文介绍了启用和禁用在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); //设置rowTextView或某事的一些性质
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屋!
查看全文