Подтвердить что ты не робот

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

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

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

До того, как я попал в поколение Bitmap, я практиковал простой TextView, используя этот учебник Alarm Manager Виджет

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

Мои вопросы:

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

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

4b9b3361

Ответ 1

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

  • Самый простой. Если вы используете 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" />

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

enter image description here

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

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

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

Ответ 2

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

Ответ 3

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

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

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