Создание android-компонента. Круглая слайд-кнопка. Часть 3 — Обработка срабатывания

samsung_slide_button_middle

Создание android-компонента. Круглая слайд-кнопка. Сага в 3х частях:

Визуально все работает как надо. Остались нереализованными только переливающиеся стрелочки по бокам кнопки. Их реализация — задача второстепенная, ее оставляю на усмотрение читателя, в качестве домашнего задания, а сейчас научим нашу кнопку собственно быть кнопкой — т.е. сообщать о срабатывании туда, куда надо (стучать в КГБ). Попутно, добавим тактильности — короткое вибро при нажатии на иконку кнопки и такое же короткое вибро при срабатывании. Начнем с обработки срабатывания.

Далее …

Создание android-компонента. Круглая слайд-кнопка. Часть 2 — настройки компонента xml-атрибутами.

samsung_slide_button_middle

Создание android-компонента. Круглая слайд-кнопка. Сага в 3х частях:

Итак, компонент задышал, визуальное работает, однако функционал не не гибок — нет настроек. Менять каждый раз параметры в тексте класса это моветон. Надобно устанавливать параметры xml-атрибутами, на этапе подготовки разметки. Для этого мы внедрим такой функционал в наш компонент.

Для начала создадим файл res/values/attrs.xml с описанием атрибутов, которые будут нашими настройками

Далее …

Создание android-компонента. Круглая слайд-кнопка. Часть 1 — общий функционал.

samsung_slide_button_middle

Создание android-компонента. Круглая слайд-кнопка. Сага в 3х частях:

Понадобилось в одной моей разработке выводить напоминание с двумя кнопками — типа «принять» и «напомнить позже». В принципе можно было не заморачиваться, но хотелось чего-то оригинального.

Давно мне не давали покоя кнопки приема/отклонения звонка или будильника/таймера в моем Samsung Galaxy S5 — круглая кнопочка, при нажатии на нее, из нее вылезает полупрозрачный расширяющийся круг. А когда тянешь палец в сторону — за ним тянется еще один расширяющийся круг. Дотащив второй круг до границы первого вызываем срабатывание кнопки. А если не дотащить до границы и отпустить, то оба круга плавно сожмутся и исчезнут. Как это выглядит в натуре видно на миниатюре к этому посту.

Далее …

Перехват нажатия клавиш громкости и других механических кнопок

Для перехвата нажатия кнопок в Activity нужно переопределить метод dispatchKeyEvent:

Правильное использование паттерна Singleton в Android

Создаем класс Singletone

    class MySingleton {
     ...
     
     // Инициализация класса
     public static void initInstance() {
      if (mInstance == null) {
       mInstance = new MySingleton();
      }
     }
     
     // Получение экземпляра
     public static MySingleton getInstance() {
      return mInstance;
     }
     
     ...
    }

Далее …

Как получить формат даты и времени текущей локали

Получаем дату, отформатировнную согласно локали, установленной в android:

Date date = new Date(TimeInMills);
java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(context);
String s = dateFormat.format(date);

На вход подаем long TimeInMills — время в миллисекундах. Так же нам понадобится контекст.
В результате в переменной s содержится отформатированная дата.

А еще можно использовать методы getLongDateFormat, getMediumDateFormat чтобы получить ту же дату, только в длинном и среднем формате.

Выясняем 12 или 24 часа в текущей локали:

android.text.format.DateFormat.is24HourFormat(context)

Результат — булево. True — 24-часовой формат, false — 12-часовой.

DialogFragment на весь экран

Как развернуть диалог сделанный с помощью DialogFragment на весь экран. Просто добавить код в метод OnStart:

 

    @Override
    public void onStart() {
        super.onStart();

        Dialog dialog = getDialog();
        if (dialog != null) {
            dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, 
                  ViewGroup.LayoutParams.MATCH_PARENT);
        }
    }

SliderButton — реализация скользящей кнопки типа «Slide to unlock»

Точнее это не Slide to unlock, а скорее реализация ответа на звонок: кнопка по центру, которую можно сдвигать влево или вправо до конца экрана. Такой функционал может использоваться, например, при приеме звонка (принять/отклонить), при активизации напоминания (завершить/отложить) и тому подобное. Переделать это под Slide to unlock достаточно просто. Сразу скажу, что идея не моя, идея взята со StackOverflow, однако доработана мной в соответствии со своим видением того, как это должно работать.

Итак. Мне нужна кнопка по центру экрана, которую можно будет сдвигать влево или вправо, тем самым выбирая один из двух вариантов действия. Можно было бы заморочиться с ImageView, такая реализация тоже мне попадалась, однако больше всего мне понравился вариант модифицировать под это SeekBar. Этот компонент уже имеет на борту почти весь необходимый функционал, осталось лишь слегка подрихтовать.
Далее …

Диалог выбора рингтона (Ringtone Picker Dialog)

Что-то как-то маловато информации на русском на эту тему. Запишу и систематизирую немного. Итак. Как показать диалог для выбора рингтона/мелодии? Очень просто. Создать Intent с определенными параметрами и вызвать startActivityForResult:

Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TITLE, "Выберите рингтон:");
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_SILENT, false);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_SHOW_DEFAULT, true);
intent.putExtra(RingtoneManager.EXTRA_RINGTONE_TYPE, RingtoneManager.TYPE_ALL);
startActivityForResult(intent, 111);

Параметры диалога передаются через этот же Intent с помощью дополнительных полей: putExtra(Параметр, значение). В примере выше задаются 4 параметра диалога.

Далее …

Зачеркнутый текст в TextView

Собственно — сабж. Как сделать зачеркнутый текст в TextView?