Кастомный "Календарь"

Интерфейс, диалоги, темы, стили, меню
Ответить
парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Кастомный "Календарь"

Сообщение парень » 31 дек 2013, 04:05

Добрый день(утра,ночи). И с наступающим вас всех.

Озадачился целью выводить диалог с "календарем" для красоты выбора даты. Датапикер бесит своей пустотой.
Пишу приложение и для 2.2 так что CalendarView - даже не изучал(он же с 11 api и в саппорт либу не входит - верно?).

А задача следующая - при нажатии на кнопку с полем "Дата" должен открываться диалог с развернутым календарем на год вперед и год назад (примерно) в виде списка(смотреть картинку), если пальцем скроллить то он соответственно прокручивается на предыдущий или последующий месяц.

Примерную реализацию вижу так:
ScrollView, в нем около 24!!!! GridView - таблица дней, и LinearLayout к каждому "месяцу" с Названием месяца и днями недели...
один месяц=один GridView на 7 столбцов на 6 строк. в качестве массива данных мы даем ему строковой массив в виде {"","","1","2",..."30"}
первые два пустые не спроста - предполагается что данный месяц начинается со среды, то етсь первое число этого месяца среда, другого будет другой день недели. Т.е. нам надо формировать массив для каждого месяца. Тут у меня вопрос: как это сделать? я несколько часов разбирал уроки и примеры с Calendar и не понял (текущий год-1 и потом цикл на 12 месяцев, но для начала мне надо узнать первый день недели года(не текущего, а предыдущего!)) и как узнать сколько дней в феврале во время работы заполнения массива?

после заполнения каждого месяца мы передаем его адаптеру который кидает его в GridView, ему мы ставим обработчик один на все гридвью. где и "сохраняем" нажатие на конкретный пункт... также в нем прописываем "ничего не деланье" если нажали на "пустой эллемент GridView.

Что-то мне подсказывает что это слишком сложный подход и есть решения куда проще?

Поделитесь мыслями ребят плз. Еще раз всех с наступающим. А я пошел спать. ;)
Вложения
dialog_calendar.png
dialog_calendar.png (36.64 КБ) 6766 просмотров
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Кастомный "Календарь"

Сообщение altwin » 31 дек 2013, 15:12

парень писал(а): Пишу приложение и для 2.2 так что CalendarView - даже не изучал(он же с 11 api и в саппорт либу не входит - верно?).
Ага, верно. Но есть это, к тому же есть Вот это
Изображение

парень
Сообщения: 223
Зарегистрирован: 30 мар 2013, 22:52

Re: Кастомный "Календарь"

Сообщение парень » 01 янв 2014, 12:11

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

а вот второе - я поизучаю.

спасибо.
Мой первенец: MyMoney. Менеджер расходов

Бьем рекорды русских топов :)

Могу ответить на любые вопросы по маркетингу и развитию.

Аватара пользователя
kondra007
Сообщения: 91
Зарегистрирован: 23 янв 2013, 14:49

Re: Кастомный "Календарь"

Сообщение kondra007 » 10 янв 2014, 13:15

К второй ссылке: помогите, пожалуйста, как вставить этот календарь в активити? (http://corner.squareup.com/2013/01/times-square.html)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Кастомный "Календарь"

Сообщение klblk » 10 янв 2014, 13:42

kondra007 писал(а):К второй ссылке: помогите, пожалуйста, как вставить этот календарь в активити? (http://corner.squareup.com/2013/01/times-square.html)
Думаю как-то так:
1) качаем либу (https://github.com/square/android-times-square)
2) импортируем в eclipse (или туда где вы работаете)
3) подключаем библиотеку к своему проекту (можно потестировать на sample)
4) используем в layout:
[syntax=xml]<com.squareup.timessquare.CalendarPickerView
android:id="@+id/calendar_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>[/syntax]

сам не проверял, но начал бы примерно с этого

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Кастомный "Календарь"

Сообщение klblk » 16 янв 2014, 09:51

К теме календарей, недавно встретил в ленте на g+ https://github.com/tyczj/ExtendedCalendarView

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Кастомный "Календарь"

Сообщение snowkam » 28 мар 2014, 15:25

klblk писал(а):К теме календарей, недавно встретил в ленте на g+ https://github.com/tyczj/ExtendedCalendarView
Не могу чего-то подключить как вообще правильно это сделать?

1. скачал zip архив распаковал на компьютер
2. в eclipse делаю импорт туда где мой проект
3. кликаю правой кнопкой мыши по проекту properties -> Java build path -> Libraries -> Add Library -> Android Classpath Container -> Picked "ExtendedCalendarView" from the list -> Finish
4. там же Android-> library жму кнопку ADD добавляю директорию ExtendedCalendarView
5. в layout вставляю код

<com.tyczj.extendedcalendarview.ExtendedCalendarView
android:id="@+id/calendar"
android:layout_height="match_parent"
android:layout_width="match_parent"/>

жму выполнить и получаю большую бороду
03-28 12:21:01.115: E/AndroidRuntime(462): FATAL EXCEPTION: main
03-28 12:21:01.115: E/AndroidRuntime(462): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.calendartest/com.example.calendartest.MainActivity}: android.view.InflateException: Binary XML file line #16: Error inflating class com.tyczj.extendedcalendarview.ExtendedCalendarView
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread.access$2300(ActivityThread.java:125)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.os.Handler.dispatchMessage(Handler.java:99)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.os.Looper.loop(Looper.java:123)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread.main(ActivityThread.java:4627)
03-28 12:21:01.115: E/AndroidRuntime(462): at java.lang.reflect.Method.invokeNative(Native Method)
03-28 12:21:01.115: E/AndroidRuntime(462): at java.lang.reflect.Method.invoke(Method.java:521)
03-28 12:21:01.115: E/AndroidRuntime(462): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
03-28 12:21:01.115: E/AndroidRuntime(462): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
03-28 12:21:01.115: E/AndroidRuntime(462): at dalvik.system.NativeStart.main(Native Method)
03-28 12:21:01.115: E/AndroidRuntime(462): Caused by: android.view.InflateException: Binary XML file line #16: Error inflating class com.tyczj.extendedcalendarview.ExtendedCalendarView
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.createView(LayoutInflater.java:513)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:565)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.rInflate(LayoutInflater.java:618)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.inflate(LayoutInflater.java:407)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:138)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)
03-28 12:21:01.115: E/AndroidRuntime(462): at com.example.calendartest.MainActivity.onCreate(MainActivity.java:13)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
03-28 12:21:01.115: E/AndroidRuntime(462): ... 11 more
03-28 12:21:01.115: E/AndroidRuntime(462): Caused by: java.lang.reflect.InvocationTargetException
03-28 12:21:01.115: E/AndroidRuntime(462): at com.tyczj.extendedcalendarview.ExtendedCalendarView.<init>(ExtendedCalendarView.java:54)
03-28 12:21:01.115: E/AndroidRuntime(462): at java.lang.reflect.Constructor.constructNative(Native Method)
03-28 12:21:01.115: E/AndroidRuntime(462): at java.lang.reflect.Constructor.newInstance(Constructor.java:446)
03-28 12:21:01.115: E/AndroidRuntime(462): at android.view.LayoutInflater.createView(LayoutInflater.java:500)
03-28 12:21:01.115: E/AndroidRuntime(462): ... 21 more
03-28 12:21:01.115: E/AndroidRuntime(462): Caused by: java.lang.NoSuchMethodError: java.util.Calendar.getDisplayName
03-28 12:21:01.115: E/AndroidRuntime(462): at com.tyczj.extendedcalendarview.ExtendedCalendarView.init(ExtendedCalendarView.java:90)
03-28 12:21:01.115: E/AndroidRuntime(462): ... 25 more

Ответить