我想为androidos1.5及更高版本开发一个定制的日历日视图。类似于android日日历,在日视图中添加和显示事件。如果你有它的例子或来源,那么请给我。我不知道怎么开始。请引导我。我已经按照下面的链接完成了月视图:http://w2davids.wordpress.com/android-simple-calendar/但我也要创建日视图,所以请帮助我。我要显示以下内容:
lrl1mhuk1#
我刚刚研究过这个:你可以把它看作一个蓝图。
/** * @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;@Overridepublic 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 } });}
/**
* @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(){
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return false;
}
public boolean isEnabled(int arg0) {
public int getCount() {
return HOURS_PER_DAY;
public Object getItem(int arg0) {
return null;
public long getItemId(int arg0) {
return 0;
public int getItemViewType(int arg0) {
public View getView(int position, View arg1, ViewGroup arg2) {
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(){
public void onClick(View arg0) {
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() {
alert.show();
return listItem;
public int getViewTypeCount() {
return 1;
public boolean hasStableIds() {
public boolean isEmpty() {
public void registerDataSetObserver(DataSetObserver arg0) {
public void unregisterDataSetObserver(DataSetObserver arg0) {
/可拉伸的/ eventbg.xml ```
eventbg.xml
9rygscc12#
帮助有相同问题的用户的最新答案:您可以为实现日历日视图使用或自定义此源https://github.com/r3za13/android-timeline-schedule-view
7kjnsjlb3#
你可以使用谷歌日历来显示你的新日历,在这里你可以创建自己的活动。下面是创建新日历的类。
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; }}
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;
在主活动中,您可以调用add calendar来创建日历并将事件添加到此日历中。
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); }
Uri cancelUri;
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); }
public void delCal(View view){
crv.delete(cancelUri, null, null);
3条答案
按热度按时间lrl1mhuk1#
我刚刚研究过这个:

你可以把它看作一个蓝图。
/可拉伸的/
eventbg.xml
```9rygscc12#
帮助有相同问题的用户的最新答案:您可以为实现日历日视图使用或自定义此源https://github.com/r3za13/android-timeline-schedule-view
7kjnsjlb3#
你可以使用谷歌日历来显示你的新日历,在这里你可以创建自己的活动。下面是创建新日历的类。
在主活动中,您可以调用add calendar来创建日历并将事件添加到此日历中。
要删除此日历,您可以按以下操作