Создание цифрового виджета с пользовательским шрифтом

Я пытаюсь создать виджет цифровых часов с пользовательским шрифтом. И это оказалось самой большой проблемой для моих Android-приложений. (Думал, что это будет так же просто, как tc.setTypeFace("whatever") и покончить с ним)

Лучше всего поцарапать TextClock и использовать ImageView и передать ему Bitmap с помощью настраиваемого AlarmManager для создания нового изображения для просмотра каждую секунду.

До того, как я попал в поколение Bitmap, я практиковал простой TextView с помощью этого руководства Alarm Manager Widget

Моя проблема в том, что я не могу это обновлять каждую секунду. Я использую am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi); Но он по-прежнему обновляет его каждую минуту или около того (не в верхней части каждой минуты). Я думаю, что это имеет отношение к тому, как более современные ОС (Kitkat, Lollipop) обрабатывают AlarmManagers .

Мои вопросы:

  1. Это правильный способ сделать это? Если нет, объясните, что я должен делать.

  2. Как я могу заставить виджет обновлять каждую секунду?

У меня была такая же проблема … У вас есть 2 варианта, которые я знаю до сих пор:

  1. Самый простой. Если вы используете API-уровень 16 или выше, вы можете просто добавить android:fontFamily="sans-serif-thin" например, в ваш XML-файл. Работает как шарм!

Это мой TextView:

 <TextView android:id="@+id/Time" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="none" android:fontFamily="sans-serif-thin" android:gravity="center_vertical|center_horizontal" android:includeFontPadding="false" android:singleLine="true" android:text="12:01" android:textColor="#fff" android:textSize="80sp" /> 

И вот как это выглядит:

Введите описание изображения здесь

Единственным недостатком этого метода является отсутствие большого выбора системных шрифтов, которые вы можете использовать.

  1. Трудный способ – просто использовать свой собственный класс, ведьма расширяет объект TextView таким образом и определяет его вместо обычного TextView в вашем XML-файле. Я не рекомендую его, потому что возможно появление ошибок.

Изменить: для обновления виджета каждую минуту – вам нужно запустить службу, которая может обновлять ваши часы каждую минуту (или вторую, если хотите). Проверьте этот пример .

Используйте эту ссылку, чтобы получить Textclock ниже уровня API 17. Вы можете использовать .setTypeface (Typeface.createFromAsset (getAssets (), fonts / font.ttf ")), с ним.

Для API 17 или выше для настройки шрифтов вам необходимо загрузить файл .ttf для любых шрифтов, которые вы хотите, затем создать каталог / шрифты / затем сохранить шрифты

Введите описание изображения здесь

 Typeface fonttype fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf"); textclock.setTypeface(fonttype);