在android中的自定义日历日视图

我想为Android OS 1.5及更高版本开发自定义日历日视图。

类似于android日历和事件在日视图中添加和显示。

如果您有示例或来源,请给我。

我不知道如何开始。 请指导我。

我按照以下链接完成了月视图:

Android Simple Calendar

但我还要创建日视图所以请帮助我。

我想显示这个:

在此处输入图像描述

我刚刚做了这个:

预习

您可以将其视为开始蓝图

小问题 :有人能告诉我哪里可以发布自己的教程和内容吗? 什么是最好的网站或某事? (我不想为自己的网站付费,虽然它很酷)

/** * @author Sherif * * Copyright 2011 * * Sample Day Viewer that will show entries of each hour with ability to * add events and stuff * You should find a way to keep a container that will keep track of added events * */ public class DayViewActivity extends ListActivity { /** Called when the activity is first created. */ private static int HOURS_PER_DAY = 24; Context mContext = this; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //getListView().setBackgroundColor(Color.rgb(12, 12, 12)); getListView().setDividerHeight(0); setListAdapter(new ListAdapter(){ @Override public boolean areAllItemsEnabled() { // TODO Auto-generated method stub return false; } @Override public boolean isEnabled(int arg0) { // TODO Auto-generated method stub return false; } @Override public int getCount() { // TODO Auto-generated method stub return HOURS_PER_DAY; } @Override public Object getItem(int arg0) { // TODO Auto-generated method stub return null; } @Override public long getItemId(int arg0) { // TODO Auto-generated method stub return 0; } @Override public int getItemViewType(int arg0) { // TODO Auto-generated method stub return 0; } @Override public View getView(int position, View arg1, ViewGroup arg2) { // TODO Auto-generated method stub LayoutInflater inflater = getLayoutInflater(); View listItem = (View) inflater.inflate(R.layout.list_item, getListView(),false); TextView hourTV = (TextView) listItem.findViewById(R.id.hourTV); TextView amTV = (TextView) listItem.findViewById(R.id.amTV); hourTV.setTextColor(Color.BLUE); amTV.setTextColor(Color.BLUE); final LinearLayout eventsLL = (LinearLayout) listItem.findViewById(R.id.eventsLL); hourTV.setText(String.valueOf((position+9)%24)); //I set am/pm for each entry ... you could specify which entries if(((position>=0)&&(position< =2))||((position>=15)&&(position< =23))) amTV.setText("am"); else amTV.setText("pm"); eventsLL.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { // TODO Auto-generated method stub AlertDialog.Builder alert = new AlertDialog.Builder(mContext); alert.setTitle("New Event"); alert.setMessage("Event:"); // Set an EditText view to get user input final EditText input = new EditText(mContext); alert.setView(input); alert.setPositiveButton("Add", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { TextView A = new TextView(mContext); A.setText(input.getText()); A.setTextColor(Color.BLACK); eventsLL.addView(A); } }); alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { } }); alert.show(); } }); return listItem; } @Override public int getViewTypeCount() { // TODO Auto-generated method stub return 1; } @Override public boolean hasStableIds() { // TODO Auto-generated method stub return false; } @Override public boolean isEmpty() { // TODO Auto-generated method stub return false; } @Override public void registerDataSetObserver(DataSetObserver arg0) { // TODO Auto-generated method stub } @Override public void unregisterDataSetObserver(DataSetObserver arg0) { // TODO Auto-generated method stub } }); } 

/ drawable / eventbg.xml

 < ?xml version="1.0" encoding="utf-8"?>      

/ layout / list_item.xml

 < ?xml version="1.0" encoding="utf-8"?>          

您可以使用谷歌日历来显示您的新日历,在这里您可以创建自己的活动。 以下是创建新日历的课程。

 public class CalendarMapper { private static final String ACCOUNT_NAME = "private"; private static final String INT_NAME_PREFIX = "priv"; @SuppressLint("NewApi") private static Uri buildCalUri() { return CalendarContract.Calendars.CONTENT_URI .buildUpon() .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true") .appendQueryParameter(Calendars.ACCOUNT_NAME, ACCOUNT_NAME) .appendQueryParameter(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL) .build(); } private static ContentValues buildContentValues(Calendar calendar) { String dispName = "TUM3"; //Calendar.getName() returns a String String intName = INT_NAME_PREFIX + dispName; final ContentValues cv = new ContentValues(); cv.put(Calendars.ACCOUNT_NAME, ACCOUNT_NAME); cv.put(Calendars.ACCOUNT_TYPE, CalendarContract.ACCOUNT_TYPE_LOCAL); cv.put(Calendars.NAME, intName); cv.put(Calendars.CALENDAR_DISPLAY_NAME, dispName); //cv.put(Calendars.CALENDAR_COLOR, calendar.getColor()); //Calendar.getColor() returns int cv.put(Calendars.CALENDAR_ACCESS_LEVEL, Calendars.CAL_ACCESS_OWNER); cv.put(Calendars.OWNER_ACCOUNT, ACCOUNT_NAME); cv.put(Calendars.VISIBLE, 1); cv.put(Calendars.SYNC_EVENTS, 1); return cv; } @SuppressWarnings("deprecation") public static Uri addCalendar(Calendar calendar, ContentResolver cr) { if (calendar == null) throw new IllegalArgumentException(); final ContentValues cv = buildContentValues(calendar); Uri calUri = buildCalUri(); Uri cancelUri=cr.insert(calUri, cv); return cancelUri; } } 

在主活动中,您可以调用添加日历来创建日历并在此日历中添加事件。

 Uri cancelUri; @SuppressLint("NewApi") public void displayCal(View view){ ContentResolver crv = getContentResolver(); Calendar calendar = Calendar.getInstance(); cancelUri= CalendarMapper.addCalendar(calendar, crv); long calID=2; //ID of the newly created calendar. You can query the calendars table to get the ID of your calendar long endMillis = 10100; Calendar beginTime = Calendar.getInstance(); beginTime.set(2012, 9, 14, 7, 30); long startMillis = beginTime.getTimeInMillis(); Calendar endTime = Calendar.getInstance(); endTime.set(2012, 9, 14, 8, 45); endMillis = endTime.getTimeInMillis(); ContentResolver cr = getContentResolver(); ContentValues values2 = new ContentValues(); values2.put(Events.DTSTART, startMillis); values2.put(Events.DTEND, endMillis); values2.put(Events.TITLE, "Jazzercise"); values2.put(Events.DESCRIPTION, "Group workout"); values2.put(Events.CALENDAR_ID, calID); values2.put(Events.EVENT_TIMEZONE, "America/Los_Angeles"); Uri uri = cr.insert(Events.CONTENT_URI, values2); Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); ContentUris.appendId(builder, startMillis); Intent intent = new Intent(Intent.ACTION_VIEW) .setData(builder.build()); startActivity(intent); } 

要删除此日历,您可以执行以下操作

 public void delCal(View view){ ContentResolver crv = getContentResolver(); crv.delete(cancelUri, null, null); }