使用自定义字体创建数字时钟小部件

Creating A Digital Clock Widget With A Custom Font

我正在尝试创建一个带有自定义字体的数字时钟小部件。事实证明,这是我 Android 经历中最大的挑战。 (本以为tc.setTypeFace("whatever")这么简单就搞定了)

最好的方法似乎是划掉 TextClock 并使用 ImageView 并使用自定义 AlarmManager 将位图传递给它以每秒为视图创建一个新图像.

在进入位图生成之前,我使用本教程 Alarm Manager Widget

在一个简单的 TextView 上进行了练习

我的问题是我无法每秒更新一次。我用 am.setRepeating(AlarmManager.RTC_WAKEUP , System.currentTimeMillis()+1000, 1000, pi); 但它仍然只每分钟左右更新一次(虽然不是每分钟的顶部)。我认为这与最近 OS(Kitkat、Lollipop)处理 AlarmManagers.

的方式有关

我的问题是:

  1. 这样做正确吗?如果不是,请说明我应该怎么做。

  2. 如何让小部件每秒更新一次?

我遇到了同样的问题... 据我所知,您现在有 2 个选择:

  1. 最简单 - 如果您使用的是 API 级别 16 或更高级别,您只需在 xml 文件中添加 android:fontFamily="sans-serif-thin" 属性即可。 很有魅力!

这是我的 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. 困难的方法是使用您自己的 Class, 像 that 一样扩展 TextView 对象,并在 xml 文件中定义它而不是普通的 TextView。 我不推荐它,因为它可能会出现错误。

编辑: 要每分钟更新一次小部件 - 您需要启动一个 Service,它可以每分钟(如果需要,也可以是每秒钟)更新您的时钟。 也检查 this example

使用此 link 将 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);