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

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

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

Прежде чем перейти к созданию растрового изображения, я практиковался в TextView с помощью этого учебника Alarm Manager Widget

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

Мои вопросы:

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

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

3 ответа

Решение

У меня была такая же проблема... У вас есть 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 для любых шрифтов, которые вы хотите, затем создать каталог assets/fonts/ и сохранить ваши шрифты.

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

Typeface fonttype
fonttype = Typeface.createFromAsset(getActivity().getAssets(), "fonts/robotoregular.ttf");
textclock.setTypeface(fonttype);
Другие вопросы по тегам