Пользовательский календарный день в андроиде

17

Я хочу создать пользовательский календарный вид дня для ОС Android 1.5 и более поздних версий.

Аналогично календарю дня и событию дня android; отображение в дневном режиме.

Если у вас есть пример или источник, то, пожалуйста, дайте мне.

Я не знаю, как начать. Пожалуйста, направляйте меня.

Я просмотрел месяц в соответствии с приведенной ниже ссылкой:

Ссылка

, но я также должен создать дневной просмотр, поэтому, пожалуйста, помогите мне.

Я хочу показать это:

    
задан Nikhil 28.07.2011 в 13:27
источник
  • Вы ищете это? stackoverflow.com/questions/6080307/... Таким образом вы можете настроить свой вид календаря. РЕДАКТИРОВАТЬ Также вы можете создать пользовательский пиковый день, например this.google.com/p/android-wheel/downloads/list или code.google.com/p/android-wheel/source/browse/... –  Dharmendra 28.07.2011 в 14:15
  • Пожалуйста, проверьте ниже ссылку, которую я хочу отображать, например, создаю пользовательский вид дня stackoverflow.com/questions/6137965/... –  Nikhil 28.07.2011 в 15:51
  • code.google.com/p/iosched - ссылка в этом вопросе, поэтому вы можете получить исходный код здесь. code.google.com/p/iosched/source/browse/#hg%2Fandroid –  Dharmendra 28.07.2011 в 16:03
  • Я хочу реализовать Android 1.6 и выше. –  Nikhil 01.08.2011 в 13:37
  • можете ли вы пометить ответ, пожалуйста: $? только ради зеленого тика: P –  Sherif elKhatib 11.08.2011 в 02:28

2 ответа

26

Я просто работал над этим:

Вы можете рассмотреть проект для запуска

Маленький вопрос : может кто-нибудь сказать мне, где я могу опубликовать собственные уроки и прочее? что является самым красивым сайтом или sth? (Я не хочу платить за свой сайт, хотя его классная идея)

/**
 * @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

        }

    });
}

/ вытяжка / eventbg.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#FFFFFF"/>
    <corners android:radius="5px"/>
    <padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" /> 
</shape>

/ макет / list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:paddingTop="5dip"
  android:paddingBottom="5dip"
  android:background="#CCC">
    <LinearLayout 
        android:id="@+id/linearLayout1" 
        android:layout_height="fill_parent" 
        android:layout_width="wrap_content" 
        android:orientation="vertical">
        <TextView 
            android:id="@+id/hourTV" 
            android:text="" 
            android:textAppearance="?android:attr/textAppearanceSmall" 
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content"/>
        <TextView 
            android:id="@+id/amTV" 
            android:text="" 
            android:textAppearance="?android:attr/textAppearanceSmall" 
            android:layout_height="wrap_content" 
            android:layout_width="wrap_content"/>
    </LinearLayout>
    <LinearLayout 
        android:id="@+id/LLdesign" 
        android:orientation="horizontal"
        android:layout_height="fill_parent" 
        android:layout_width="fill_parent"
        android:padding="3dip">
        <LinearLayout 
            android:id="@+id/eventsLL"
            android:orientation="vertical"
            android:layout_height="fill_parent" 
            android:layout_width="fill_parent"
            android:background="@drawable/eventbg"></LinearLayout>
        </LinearLayout>

</LinearLayout>
    
ответ дан Sherif elKhatib 05.08.2011 в 12:16
  • хороший ответ! О вашем вопросе о разделении учебников и кода .. вы можете использовать androidsnippets [dot] com –  SERPRO 09.08.2011 в 11:07
  • Спасибо :) очень –  Sherif elKhatib 09.08.2011 в 11:09
  • спасибо за обмен учебниками, и если вы не возражаете, тогда я хочу задавать вопросы, я не получаю белую строку после записи события. Просто напишите только в listview.i добавили eventbg.xml в drwable –  Google 14.03.2012 в 12:08
  • @SherifelKhatib hey man can u скажите мне, как я могу добавить строку, такую ​​как просмотр календаря google в вашем примере? Я пытаюсь много изменений, но не могу получить что-нибудь. hv u любое предложение для этого? –  Google 24.03.2012 в 08:02
  • Хорошее время для просмотра Ruler. Если вы хотите реализовать его с хорошими функциями, см. эту ссылку code.google.com/p/iosched –  Ashish Mishra 19.12.2012 в 13:42
Показать остальные комментарии
0

вы можете использовать календарь Google, чтобы отображать свой новый календарь, и здесь вы можете создавать свои собственные события. Ниже приведен класс для создания нового календаря.

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);
    }
    
ответ дан Haris Iltifat 14.07.2013 в 16:47