Создание Виджета Цифровых Часов С Пользовательским Шрифтом

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

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

прежде чем я попаду в поколение растровых изображений, я практиковался на простом TextView С помощью этого учебник Виджет Диспетчера Сигнализации

моя проблема в том, что я не могу обновлять это каждую секунду. Я использую 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" />

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

enter image description here

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

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

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


использовать ссылке чтобы получить Textclock ниже уровня API 17. Тебе бы пригодилось .setTypeface(шрифт.createFromAsset(getAssets(),шрифты/шрифт.ТЦФ")); с ним.


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

enter image description here

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